Напишите число с двумя десятичными знаками SQL-сервера

Ответы:

213

попробуй это

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Ханох
источник
2
Если бы это был ответ 10 лет назад, его больше нет. Этот метод превратит 10.11111 в 10.00.
Джонатон Коули-Том
Я попытался SELECT CONVERT (DECIMAL (10,2), 10.11111), он возвратил 10.11 такой же результат для SELECT CONVERT (DECIMAL (10,2), '10.11111'), который был в Sql Server 2008 R2
SKCS Kamal
70

Используйте Str()функцию. Требуется три аргумента (число, общее количество отображаемых символов и количество отображаемых десятичных знаков).

  Select Str(12345.6789, 12, 3)

отображает: «12345.679» (3 пробела, 5 цифр 12345, десятичная точка и три десятичных знака (679). - округляется, если необходимо усечь (если целая часть не слишком велика для общего размера, в этом случае вместо этого отображаются звездочки.)

Всего 12 символов, с 3 справа от десятичной точки.

Чарльз Бретана
источник
1
it rounds if it has to truncate... если целая часть не слишком велика для общего размера, в этом случае вместо нее отображаются звездочки. Это упоминается в документации дляSTR . Вот цитата с этой страницы:STR(1223,2) truncates the result set to **.
Марк Байерс
36

Как правило, вы можете определить точность числа в SQL, задав его с помощью параметров. В большинстве случаев это будет NUMERIC(10,2)или Decimal(10,2)- будет определять столбец как число с 10 цифрами с точностью до 2 (десятичных знаков).

Отредактировано для ясности

AAA
источник
4
Он также может быть объявлен как ДЕСЯТИЧНЫЙ (10, 2).
jrcs3
10
Это неправильно по нескольким причинам. Это не число, это числовое или десятичное число. Вы говорите, что числовое (10,2) позволяет 10 знаков после запятой, что также неверно. числовой (10,2) допускает 10 полных цифр с двумя знаками после запятой. Диапазон = от -99999999,99 до 99999999,99
Джордж Мастрос
@G Mastros: Похоже, вы правы в точности. При фактическом именовании соглашения во многих реализациях SQL NUMBER является допустимым типом. Хотя я признаю, что не знал о случае sqlserver
AAA
@GMastros пришел сказать то же самое. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Джо,
19

Эта работа для меня и всегда держит две цифры дроби

23,1 ==> 23,10

25,569 ==> 25,56

1 ==> 1,00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

Скриншот кода

Мохамед Рамадан
источник
2
попробуйте функцию STR () от Чарльза Бретана выше. Это работает как ваша формула, но будет округлять ваш пример 25.569.
JerryOL
15

Вот как дети делают это сегодня:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123,46

ClubbieTim
источник
1
Функция FORMAT доступна с версии 2012 года.
user1263981
или: ВЫБРАТЬ ФОРМАТ (@test, '. ##')
java-love
Если входные данные были: DECLARE @test DECIMAL(18,6) = 0.456789 затем SELECT FORMAT(@test, '##.##')возвращает: .46 Как вы получите, чтобы показать ведущий ноль 0.46:?
Луисдев
Чтобы получить 0, попробуйте выбрать SELECT FORMAT (@test, '# 0. ##')
ClubbieTim
14

Если вам нужно только два десятичных знака, самый простой способ это ..

SELECT CAST(12 AS DECIMAL(16,2))

ИЛИ

SELECT CAST('12' AS DECIMAL(16,2))

Вывод

12.00
SonalPM
источник
7

Если вы хорошо округлили число вместо его усечения, то это просто:

ROUND(column_name,decimals)
Антуан
источник
2

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

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Анил Чаудхари
источник
0

Умножьте значение, которое вы хотите вставить (например, 2.99) на 100

Затем вставьте деление на 100 результата, добавив 0,01 к концу:

299.01/100
Мастер SQL
источник
0

Это позволит всего 10 цифр с 2 значениями после десятичной дроби. Это означает, что он может вместить значение до десятичной цифры до 8 и до 2 после десятичной.

Для проверки введите значение в следующем запросе.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
Кумар Вишваш
источник