Подтвердить что ты не робот

Как получить 2 цифры после десятичной точки в tsql?

У меня возникла проблема с форматированием цифр в моем столбце select. Я использовал 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' не является признанным встроенным именем функции.

Как я могу отформатировать этот расчет?

4b9b3361

Ответ 1

Попробуйте этот вариант -

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

Ответ 2

Вы можете отправить его в DECIMAL и указать масштаб в 2 цифры

десятичная и цифровая

Итак, что-то вроде

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

SQLFiddle DEMO

Я бы рекомендовал, чтобы это было сделано в слое UI/Report, поскольку это приведет к потере точности.

Форматирование (на мой взгляд) должно происходить на уровне интерфейса/отчета/отображения.

Ответ 3

Попробуйте применить результат к числовому

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

Ответ 5

Итак, что-то вроде

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

Я бы рекомендовал, чтобы это было сделано в слое UI/Report, так как это приведет к потере точности.

Ответ 6

Пример: выберите CAST (12.0910239123 как десятичный (15,2))

Ответ 7

Предположим, что у вас есть динамическая точность валюты

  • 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')