Написати число з двома знаками після коми 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 загальних цифр з 2 місцями після коми. Діапазон = -99999999,99 - 99999999,99
Джордж Мастрос

@G Mastros: Здається, ви опинилися прямо на точності. Що стосується фактичного іменування конвенції, у багатьох реалізаціях SQL НОМЕР є дійсним типом. Хоча я признаюсь, що не знаю випадку sqlserver
AAA

@GMastros прийшов сказати те саме. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe

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 року.
користувач1263981

або: ВИБІР ФОРМАТ (@test, '. ##')
java-love

Якщо вхідні дані були: DECLARE @test DECIMAL(18,6) = 0.456789 тоді SELECT FORMAT(@test, '##.##')повертається: .46 Як змусити його відображати провідний нуль 0.46:?
luisdev

Щоб отримати ведучий 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 результату, додавши до кінця .01:

299.01/100

0

Це дозволить усього 10 цифр з двома значеннями після десяткової. Це означає, що воно може вмістити значення значення перед десятковим до 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.