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

Как написать число с двумя знаками после запятой для сервера sql?


person Community    schedule 14.01.2009    source источник


Ответы (10)


Попробуй это

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

Такие как

SELECT CONVERT(DECIMAL(10,2),2.999999)

приведет к выводу 3.00

введите здесь описание изображения

person Community    schedule 12.02.2009
comment
Я попробовал SELECT CONVERT (DECIMAL (10,2), 10.11111), он вернул 10.11 тот же результат для SELECT CONVERT (DECIMAL (10,2), '10.11111'), это было в Sql Server 2008 R2. - person Nathan; 21.04.2020

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

  Select Str(12345.6789, 12, 3)

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

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

person Charles Bretana    schedule 14.01.2009
comment
it rounds if it has to truncate... если целая часть не слишком велика для общего размера, в этом случае вместо нее отображаются звездочки. Это упоминается в документации для STR. Вот цитата с этой страницы: STR(1223,2) truncates the result set to **. - person Mark Byers; 25.05.2012

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

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

person AAA    schedule 14.01.2009
comment
Его также можно объявить как DECIMAL(10, 2). - person jrcs3; 14.01.2009
comment
Это неправильно по нескольким причинам. Это не число, это числовое или десятичное число. Вы говорите, что numeric(10,2) допускает 10 знаков перед запятой, что также неверно. numeric(10,2) позволяет использовать 10 цифр с двумя знаками после запятой. Диапазон = от -99999999,99 до 99999999,99 - person George Mastros; 14.01.2009
comment
@G Mastros: Похоже, вы правы в точности. Что касается фактического именования соглашения, во многих реализациях SQL NUMBER является допустимым типом. Хотя я признаю, что не знаю случая с sqlserver - person AAA; 14.01.2009
comment
@GMastros пришел сказать то же самое. msdn.microsoft.com/en-us/ библиотека/aa258832%28v=sql.80%29.aspx - person Joe; 01.11.2011

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

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

123.46

person Lysoll    schedule 10.07.2017
comment
Функция FORMAT доступна, начиная с версии 2012. - person user1263981; 17.08.2018
comment
или: ВЫБЕРИТЕ ФОРМАТ(@test, '.##') - person java-love; 20.02.2020
comment
Если входные данные были: DECLARE @test DECIMAL(18,6) = 0.456789, то SELECT FORMAT(@test, '##.##') возвращает: .46 Как сделать так, чтобы начальный нуль отображался: 0.46? - person luisdev; 09.07.2020
comment
Чтобы получить начальный 0, попробуйте SELECT FORMAT(@test, '#0.##') - person Lysoll; 10.07.2020
comment
Я думаю, вы, скорее всего, захотите использовать «0.00» вместо «#.##». # будет игнорировать конечные нули, поэтому 5.10 станет 5.1 или 4.00 просто покажет 4 само по себе. Формат «0.00» гарантирует, что вы всегда получите ровно два десятичных знака. - person dyoung; 09.03.2021

Это работает для меня и всегда сохраняет дроби из двух цифр

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1.00

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

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

person Mohamed Ramadan    schedule 19.06.2011
comment
попробуйте функцию STR() от Чарльза Бретана выше. Она работает так же, как ваша формула, но будет выполнять округление на вашем примере 25,569. - person JerryOL; 23.06.2011

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

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

OR

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

Вывод

12.00
person SonalPM    schedule 07.12.2016

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

ROUND(column_name,decimals)
person antoine    schedule 05.10.2016

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

 declare @MyFloatVal float;

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

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
person Anil Chaudhary    schedule 27.03.2017

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

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

299.01/100
person SQL Master    schedule 03.04.2012

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

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

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
person kumar vishwash    schedule 16.02.2012