Як зберігати десяткові значення в SQL Server?


272

Я намагаюся з'ясувати десятковий тип даних стовпця на SQL сервері. Мені потрібно вміти зберігати такі значення, як 15,5, 26,9, 24,7, 9,8 тощо

Я призначив decimal(18, 0)тип даних стовпців, але це не дозволяє мені зберігати ці значення.

Який правильний спосіб це зробити?

Відповіді:


513

DECIMAL(18,0) дозволить 0 цифр після десяткової коми.

Використовуйте щось DECIMAL(18,4)натомість, що має робити чудово!

Це дає вам загалом 18 цифр , 4 з яких після десяткової точки (і 14 перед десятковою комою).


@marc_s, Чи все-таки зберігається значення "4,5", де тип даних стовпця є десятковим (4,2)? Коли я вставляю значення, воно змінюється на "4,50"
Arun

1
@ArunkumarTK: decimal(4,2)дозволяє 2 цифри до і 2 цифри після коми. "4.5" можна зберігати без проблем - і за чисельністю "4.5" і "4.50" однакові
marc_s

3
@ArunkumarTK: Чому вони мають бути різними ?? І те й інше - "чотири з половиною" - значення ІСНЕ. І НЕ використовуйте a varcharдля зберігання десяткового значення !!
marc_s

1
Я знаю, що це давнє обговорення, але хіба це не було б "4,05" та "4,5" у такому випадку @ArunkumarTK.
Shelby115

2
Так, чому 18 настільки популярний (наприклад, за замовчуванням (18,0)), коли і 18, і 19 використовують 9 байт ?
xr280xr

136

Ви повинні використовувати наступне:

DECIMAL(m,a)

m - кількість загальних цифр, які може мати ваш десятковий номер.

a - максимальна кількість цифр, яку ви можете мати після десяткової крапки.

http://www.tsqltutorials.com/datatypes.php містить описи всіх типів даних.


3
Зазвичай його позначають як DECIMAL (p, s), де p означає точність (максимально допустимі цифри в кількості), а s означає масштаб (максимально допустимі цифри після десяткової крапки).
RBT

Посилання мертве
ibrahim mahrir

43

Налаштування - Decimalце його точність і масштаб або звичайною мовою, скільки цифр може мати число і скільки цифр ви хочете мати праворуч від десяткової коми.

Отже, якщо ви введете PIйого, Decimal(18,0)це буде записано як 3?

Якщо ви помістите PIйого, Decimal(18,2)це буде записано як 3.14?

Якщо ви поставите PIв Decimal(18,10)записується як 3.1415926535.


35

Більшу частину часу я використовую десятковий (9,2), який займає найменше сховища (5 байт) у десятковому типі sql.


Точність => Байти для зберігання

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

Він може зберігати від 0 до 9 999 999,99 (7 ​​знаків напередодні + 2 цифри за десятковою точкою = загальна 9 цифра), що досить велике для більшості значень.


9

Ви можете спробувати це

decimal(18,1)

Довжина чисел повинна бути повністю 18. Довжина чисел після десяткових знаків повинна бути лише 1 і не більше цього.


6

У MySQL DB decimal(4,2)дозволяє вводити лише 4 цифри. Як ви бачите в decimal(4,2), це означає, що ви можете ввести 4 цифри, з яких дві цифри призначені для зберігання після десяткових знаків.

Отже, якщо ви введете 100.0 в базу даних MySQL, це покаже помилку типу "Значення поза діапазоном для стовпця".

Отже, ви можете ввести лише в цей діапазон: з 00.00 до 99.99.


2
Чому це актуально, тоді як питання чітко визначено Microsoft SQL Server?
JCKödel

3

Інші відповіді вірні. Припустимо, що ваші приклади відображають повний спектр можливостей DECIMAL(3, 1). Або DECIMAL(14, 1)дозволить загалом 14 цифр. Ваша робота - думати про те, що достатньо.


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.