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

时间:2013-05-07 06:03:55

标签: sql-server tsql formatting

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

sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60) TotalSentMinutes    

我用过这个:

FORMAT(sum(cast(datediff(second, IEC.CREATE_DATE, IEC.STATUS_DATE) as float) / 60),2) TotalSentMinutes  

错误:

  

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

如何格式化此计算?

8 个答案:

答案 0 :(得分:92)

试试这个 -

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)

输出:

----------------------
6,68
6.68
6.68
67
67

答案 1 :(得分:11)

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

decimal and numeric

所以,像

DECLARE @i AS FLOAT = 2
SELECT @i / 3
SELECT CAST(@i / 3 AS DECIMAL(18,2))

SQLFiddle DEMO

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

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

答案 2 :(得分:2)

尝试将结果转换为数字

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

输入

1
2
3

  

输出

1.00
2.00
3.00

答案 3 :(得分:1)

您的格式语法错误,实际语法是

 FORMAT ( value, format [, culture ] )

请按照此链接帮助您

Click here for more details

答案 4 :(得分:0)

所以,像

DECLARE @i AS FLOAT = 2
SELECT @i / 3
SELECT CAST(@i / 3 AS DECIMAL(18,2))

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

答案 5 :(得分:0)

DECLARE @i AS FLOAT = 2 选择@i / 3 SELECT cast(@i / cast(3 AS DECIMAL(18,2))为十进制(18,2))

因子和结果都要求将转换视为小数。

答案 6 :(得分:-1)

样品: 选择CAST(12.0910239123为十进制(15,2))

答案 7 :(得分:-2)

假设您具有动态货币精确度

  • value => 1.002431

  • currency precision => 3

  • `result => 1.002

CAST(Floor(your_float_value) AS VARCHAR) + '.' + REPLACE(STR(FLOOR((your_float_value FLOOR(your_float_value)) * power(10,cu_precision)), cu_precision), SPACE(1), '0')