我正在使用 SQL Server 2005。数据类型是 varchar
。我正在尝试将数字转换为
1250000
到
1.25
在 SQL 查询中并删除尾随零。我已经尝试了很多没有成功的事情 - 遇到了“trim is not a function”等等。
这是我目前所拥有的,在我尝试的每次迭代中。
select top 30
var1, var2, var3, var4,
CONVERT(DECIMAL(6,2), (var5 / 1000000)) as 'Number'
from
databasetable
where
var1 = x
select top 30
var1, var2, var3, var4,
cast((var5 / 1000000) as decimal(6,2)) as 'Number'
from
databasetable
where
var1 = x
上面的两个查询都四舍五入到最接近的百万,即 1250000 变成 1.00,等等。任何想法将不胜感激。将小数更改为数字也无济于事。
最佳答案
@marc_s 绝对正确 - stop storing numbers as strings!
也就是说,您是整数数学的受害者。尝试:
SELECT CONVERT(DECIMAL(10,2), (var5 / 1000000.0))
由于您将数字存储为字符串,SQL Server 可能会在应用过滤器之前尝试使用非数字数据执行此计算,因此您可以说:
SELECT CONVERT(DECIMAL(10,2), (CASE WHEN ISNUMERIC(var5) = 1 THEN var5 END / 1000000.0))
[ Note that this isn't perfect either .]
如果这不起作用,那么您得到了一些错误数据。如果以下确实有效但产生了太多的小数位:
select
var1, ...,
CONVERT(DECIMAL(10,2), var5) / 1000000 as [Number]
然后尝试用额外的转换包装它:
select
var1, ...,
CONVERT(DECIMAL(10,2), CONVERT(DECIMAL(10,2), var5) / 1000000) as [Number]
总而言之,为什么不能在表示层格式化这个数字?
此外,请不要对列别名使用'单引号'
... this syntax is deprecated in some forms ,并且它错误地使您的列别名看起来像一个字符串(恕我直言)。使用 [square brackets]
或避免使用关键字作为别名。
关于c# - SQL 正在四舍五入我的小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601036/