如何在tsql中获得小数点后的2位数?

cih*_*a87 42 t-sql sql-server formatting

我在选择列中格式化数字时遇到问题.我使用了FORMAT但它不起作用.这是我的专栏:

sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60) TotalSentMinutes    
Run Code Online (Sandbox Code Playgroud)

我用过这个:

FORMAT(sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60),2) TotalSentMinutes  
Run Code Online (Sandbox Code Playgroud)

错误:

'format'不是公认的内置函数名称.

如何格式化此计算?

Dev*_*art 101

试试这个 -

DECLARE @i FLOAT = 6.677756

SELECT 
      ROUND(@i, 2)
    , FORMAT(@i, 'N2')
    , CAST(@i AS DECIMAL(18,2))
    , SUBSTRING(PARSENAME(CAST(@i AS VARCHAR(10)), 1), PATINDEX('%.%', CAST(@i AS VARCHAR(10))) - 1, 2)
    , FLOOR((@i - FLOOR(@i)) * 100)
Run Code Online (Sandbox Code Playgroud)

输出:

----------------------
6,68
6.68
6.68
67
67
Run Code Online (Sandbox Code Playgroud)

  • FORMAT功能从2012版开始提供 (3认同)
  • 这不适用于负数.您应该使用`ROUND`而不是`FLOOR`来正确截断数字,如下所示:`ROUND((@ i - ROUND(@ i,0,1))*100,0,1)` (2认同)

Adr*_*der 12

您可以将其强制转换为DECIMAL并将比例指定为2位数

十进制和数字

所以,像

DECLARE @i AS FLOAT = 2
SELECT @i / 3
SELECT CAST(@i / 3 AS DECIMAL(18,2))
Run Code Online (Sandbox Code Playgroud)

SQLFiddle DEMO

但是我建议在UI/Report层中完成,因为这会降低精度.

格式化(在我看来)应该在UI /报告/显示级别上进行.


Man*_*ngh 5

尝试将结果转换为数字

CAST(sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60)
    AS numeric(10,2)) TotalSentMinutes
Run Code Online (Sandbox Code Playgroud)

输入

1
2
3

输出

1.00
2.00
3.00