我在选择列中格式化数字时遇到问题。我使用了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'不是公认的内置函数名称。
如何格式化此计算?
答案 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位数
所以,像
DECLARE @i AS FLOAT = 2
SELECT @i / 3
SELECT CAST(@i / 3 AS DECIMAL(18,2))
但是我建议在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)
答案 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')