54

我在选择列中格式化数字时遇到问题。我使用了 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' 不是可识别的内置函数名称。

如何格式化此计算?

4

8 回答 8

121

试试这个——

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
于 2013-05-07T06:13:26.897 回答
16

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

十进制和数字

所以,像

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

SQLFiddle 演示

但是,我建议在 UI/Report 层中完成此操作,因为这会导致精度损失。

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

于 2013-05-07T06:07:26.160 回答
5

尝试将结果转换为数字

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

于 2013-05-07T07:30:14.153 回答
2

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

 FORMAT ( value, format [, culture ] )

请点击这个链接它可以帮助你

点击这里查看更多详情

于 2013-05-07T06:21:39.787 回答
1

所以,像

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

但是,我建议在 UI/Report 层中完成此操作,因为这会导致精度损失。

于 2016-06-02T13:10:22.533 回答
1

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

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

于 2018-04-24T05:08:35.143 回答
0
SELECT CAST(12.0910239123 AS DECIMAL(15, 2))
于 2014-12-06T21:20:15.960 回答
-2

假设您具有动态货币精度

  • value => 1.002431

  • currency precision => 3

  • `结果 => 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')

于 2013-08-29T08:12:35.993 回答