【问题标题】:Can I truncate while rounding四舍五入时我可以截断吗
【发布时间】:2015-10-07 15:16:27
【问题描述】:

在 SQL Server 2014 中,我有一些带有尾随零的值以及小数点后的一些值

select top 25 
    ProductName, round(UnitPrice, 1) as 'Price of Products'
from 
    Products

这个查询返回的结果是这样的:

Chai                           18.00
Chang                          19.00
Aniseed Syrup                  10.00
Chef Anton's Cajun Seasoning   22.00
Chef Anton's Gumbo Mix         21.40

我的问题是我是否可以删除小数点后的尾随零,同时保留可能存在的任何值,例如 21.40,而其他值仅保持为 18 或 22,因为 round 不会删除尾随零

【问题讨论】:

  • James,你解决问题的方法不对。 SQL Server 应该提供data,而不是presentation。如果您想向用户显示18 而不是18.00,请更改显示数据的组件,而不是传递数据的组件。
  • 回答这个问题,是的,可以做到,但是在TSQL中做会很乱。正如@Tomalak 所说,最好在客户端进行。如果你绝对不能这样做,那么就这么说吧,我相信我们可以编写所需的 TSQL。基本上,只有在非零时才显示美分,对吗?
  • 是的,这是正确的。我想在非零时显示美分,否则删除任何尾随零。所以如果是 19.40,美分会显示,但如果是 21.00,它只会显示 21

标签: sql-server rounding sql-server-2014 truncation


【解决方案1】:

SQL Server 2014 有FORMAT 函数。

如果将价格四舍五入为 2 位小数,格式字符串应如下所示:

FORMAT(ROUND(UnitPrice, 2), '0.##')

事实上,你不需要显式的ROUNDFORMAT 无论如何都会这样做:

FORMAT(UnitPrice, '0.##')

【讨论】:

    【解决方案2】:

    这是一个 hack,假设你总是有一个小数位。

    create table t1 (col1 decimal (5,2));
    
    insert into t1 (col1) values (10.00)
    insert into t1 (col1) values (10.50)
    
    select case col1 % 1
      when 0 then PARSENAME(col1, 2)
      else col1
    end
    from t1
    

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 2011-03-09
      • 2011-12-27
      • 1970-01-01
      • 2017-01-29
      • 2011-12-05
      • 2017-09-21
      • 2010-09-24
      相关资源
      最近更新 更多