c# - SQL 正在四舍五入我的小数点

标签 c# sql sql-server decimal converters

我正在使用 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/

相关文章:

c# - WCF:将流式处理与消息协定结合使用

带有基于基值的子查询的 SQL 查询

c# - 删除序列化程序创建的空 xmlns

c# - 更新到数据库 : Oracle 时出错

java - 如何在 java.lang.Long 值上使用通配符 (%) 搜索

mysql - SQL Select - 某些行不会显示

sql-server - 从 Azure 获取备份的正确方法是什么?

c# - 对 .NET SQL 程序集进行逆向工程

mysql - 如何通过单个 ANT 构建在 MySQL、SQL Server 和 Oracle 中创建数据库?

c# - 您如何从 GPS 坐标中获取国家/州/地区/城市/州/ zip /邮政?