如何在SQL中将小数位向右移动2位,而不是转换或四舍五入
How to move decimal place 2 positions to the right in SQL, not converting or rounding
我正在尝试将版本号转换为正确的格式,因为它附加在数据库中的其他数据中。我正在使用 substring
来提取混乱版本号的最后 6 位数字,我得到的是最后 6 位数字,但小数位比它应该按照格式设置的方式高出 2 位数字数据库。我想做的是尽可能将小数点移动两位数。这是我的驱动版本
25.21.14.2600
我需要的是最后一位小数点右边两位
426.00
我一直在寻找这方面的答案并尝试了我所看到的
CONVERT(DECIMAL,SUBSTRING(vc.DriverVersion0,8,6))/100
但这会四舍五入并移动小数位。我试过使用 Replace
Replace(SUBSTRING(vc.DriverVersion0,8,6),'.','')
哪个可以删除它,但我不知道如何在之后给它添加一个小数,如果我可以移动但任何一个都有效,那就太好了。感谢任何帮助。
嗯。 . .我不确定你想以哪种方式移动它。但是你可以使用 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)
Returns:
abc.def
12345.6
此代码:
select stuff(replace(str, '.', ''), charindex('.', str) - 2, 0, '.')
from (values ('abcde.f'), ('123.456')) v(str)
Returns:
abc.def
1.23456
我正在尝试将版本号转换为正确的格式,因为它附加在数据库中的其他数据中。我正在使用 substring
来提取混乱版本号的最后 6 位数字,我得到的是最后 6 位数字,但小数位比它应该按照格式设置的方式高出 2 位数字数据库。我想做的是尽可能将小数点移动两位数。这是我的驱动版本
25.21.14.2600
我需要的是最后一位小数点右边两位
426.00
我一直在寻找这方面的答案并尝试了我所看到的
CONVERT(DECIMAL,SUBSTRING(vc.DriverVersion0,8,6))/100
但这会四舍五入并移动小数位。我试过使用 Replace
Replace(SUBSTRING(vc.DriverVersion0,8,6),'.','')
哪个可以删除它,但我不知道如何在之后给它添加一个小数,如果我可以移动但任何一个都有效,那就太好了。感谢任何帮助。
嗯。 . .我不确定你想以哪种方式移动它。但是你可以使用 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)
Returns:
abc.def
12345.6
此代码:
select stuff(replace(str, '.', ''), charindex('.', str) - 2, 0, '.')
from (values ('abcde.f'), ('123.456')) v(str)
Returns:
abc.def
1.23456