Напишите число с двумя десятичными знаками 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 (десятичных знаков).

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


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


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

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

0

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

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

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.