#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