【问题标题】:How to move decimal place 2 positions to the right in SQL, not converting or rounding如何在 SQL 中将小数位向右移动 2 位,而不是转换或舍入
【发布时间】:2020-07-20 20:38:53
【问题描述】:

我正在尝试将版本号转换为正确的格式,因为它会附加数据库中的其他数据。我正在使用substring 提取混乱版本号的最后 6 位数字,我得到的是最后 6 位数字,但小数位比它在数据库中的格式化方式高 2 位数字.如果可能的话,我想要做的只是将小数位移动两位数。这是我的驱动版本

25.21.14.2600

我需要的是最后 6 位,右边有两个小数点

426.00

我已经为此寻找答案并尝试了我所看到的

CONVERT(DECIMAL,SUBSTRING(vc.DriverVersion0,8,6))/100

但这会将其四舍五入并移动小数位。我试过使用Replace

Replace(SUBSTRING(vc.DriverVersion0,8,6),'.','')

哪个可以删除它,但我不知道在那之后如何添加一个小数,如果我可以移动但任何一个都可以,那就太好了。任何帮助表示赞赏。

【问题讨论】:

  • 请展示一些示例数据和预期结果。
  • SUBSTRING 不会“移动”小数点的位置,CONVERT 也不会。在这里提供minimal reproducible example 真的很有帮助。

标签: sql sql-server decimal


【解决方案1】:

嗯。 . .我不确定你想以哪种方式移动它。但是你可以使用stuff()charindex()

select stuff(replace(str, '.', ''), charindex('.', str) + 2, 0, '.')

不过,我不确定你是想要 + 2 还是 - 2

所以这段代码:

select stuff(replace(str, '.', ''), charindex('.', str) + 2, 0, '.')
from (values ('a.bcdef'), ('123.456')) v(str)

返回:

abc.def
12345.6

这段代码:

select stuff(replace(str, '.', ''), charindex('.', str) - 2, 0, '.')
from (values ('abcde.f'), ('123.456')) v(str)

返回:

abc.def
1.23456

【讨论】:

  • +2 是票。谢谢。那是什么功能,东西?如何找到这些存在的地方?
  • @Keets 嗯,SQL Server 官方文档列出了所有可用的函数。
  • @DaleK 嗯,谢谢,我想看看,我可以在 SSMS 中查看列出函数的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 2023-03-24
相关资源
最近更新 更多