Номер формата n SQL

#sql #sql-server

Вопрос:

Я хочу отформатировать число следующим образом:

От 65803.12345 до 65803.12 .

От 65803.98500 до 65803.98 .

Комментарии:

1. Использовать CAST(Num AS DECIMAL(18,2))

2. Вы хотите округлить или усечь? Добавьте 65803.12666 к вашему образцу данных!

3. Также подумайте о том, чтобы сделать это в интерфейсном приложении.

Ответ №1:

Если вы хотите получить только две цифры после запятой без потолка или пола.

 DECLARE @i AS float 
DECLARE @TmpInt AS INT 
DECLARE @TmpDec AS FLOAT 

SELECT @i = 65803.12345 
SELECT @TmpInt = (SELECT CAST(@i AS INT))
SELECT @TmpDec = @i - @TmpInt
SELECT CAST(((CAST(@TmpInt AS VARCHAR(50))   SUBSTRING((LEFT((CAST(@TmpDec AS VARCHAR(50))), 4)), 2, 3))) AS DECIMAL(10, 2))
-- Output : 65803.12

SELECT @i = 65803.98500
SELECT @TmpInt = (SELECT CAST(@i AS INT))
SELECT @TmpDec = @i - @TmpInt
SELECT CAST(((CAST(@TmpInt AS VARCHAR(50))   SUBSTRING((LEFT((CAST(@TmpDec AS VARCHAR(50))), 4)), 2, 3))) AS DECIMAL(10, 2))
-- Output : 65803.98

SELECT @i = 65803.12666
SELECT @TmpInt = (SELECT CAST(@i AS INT))
SELECT @TmpDec = @i - @TmpInt
SELECT CAST(((CAST(@TmpInt AS VARCHAR(50))   SUBSTRING((LEFT((CAST(@TmpDec AS VARCHAR(50))), 4)), 2, 3))) AS DECIMAL(10, 2))
-- Output : 65803.12
 

Ответ №2:

Вы можете использовать ROUND(,) :

 ROUND(column, decimals)
 

Дополнительная информация: подробная информация о W3Schools

Ответ №3:

Попробуйте это

  declare @s decimal(12,5)
 set @s = 65803.98500
 select cast(@s-@s%1 cast(@s%1*100 as int)*0.01 as decimal(12,2))
 

Результат

 65803.98