【问题标题】:SUM rounding decimal places 2SUM 舍入小数位 2
【发布时间】:2019-02-28 07:54:45
【问题描述】:

我有一张桌子EMP 与其他桌子相连。在查询中,我曾经像这样得到SAL 的总和。我希望这个总和四舍五入到小数点后 2 位,但它给出了 4 位小数。 SALEMP 表中声明为CHAR(9)

COALESCE(CAST(SUM(CAST(SAL AS INT))/12 AS DECIMAL(13,2)), 0) as "SUM-SAL"

输出显示为 29364852.000000,但我希望将其四舍五入到小数位,并用逗号分隔。

【问题讨论】:

  • 通常,在用户屏幕上格式化数据是您的客户端应用程序的任务,而不是数据库的任务。
  • 运行您的代码后,逗号后只有两位小数。
  • 看起来你正在做一个整数除法,你有没有得到小数点后除零以外的任何东西?
  • 为什么将工资存储为char

标签: sql sql-server tsql sum decimal


【解决方案1】:

您可以使用format 尝试如下方式

例子

 DECLARE @test DECIMAL(18,6) = 123.456789
    SELECT FORMAT(@test, '##.##')

【讨论】:

  • 如果我使用格式获取错误将数据类型 nvarchar 转换为数字时出错。
【解决方案2】:

你可以试试下面的查询。

DECLARE @test DECIMAL(18,6) = 123.456789
Select cast(@test as decimal(10, 2))

DECLARE @test char(10) = '123.456789'
Select cast(@test as decimal(10, 2))

Live Demo

【讨论】:

  • 字段被声明为字符
【解决方案3】:

我想这就是你正在寻找的。​​p>

DECLARE @test char(9) = '29364852.00'
SELECT Format(cast(@test as decimal(10, 2)), '##,##.#0') 

结果:29,364,852.00

【讨论】:

  • 如果我使用格式获取错误将数据类型 nvarchar 转换为数字时出错。
  • @SRI 请检查我的回答,它也可以在 format() 不可用的 SQL Server 较低版本中运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多