Как хранить десятичные значения в SQL Server? - PullRequest
255 голосов
/ 02 мая 2009

Я пытаюсь определить десятичный тип данных столбца в SQL Server. Мне нужно иметь возможность хранить такие значения, как 15,5, 26,9, 24,7, 9,8 и т. Д.

Я присвоил decimal(18, 0) типу данных столбца, но это не позволило мне сохранить эти значения.

Как правильно это сделать?

Ответы [ 8 ]

491 голосов
/ 02 мая 2009

DECIMAL(18,0) разрешит 0 цифр после десятичной точки.

Вместо этого используйте что-то вроде DECIMAL(18,4), и все будет прекрасно!

Это дает вам всего 18 цифр , 4 из которых после десятичной точки (и 14 до десятичной точки).

123 голосов
/ 02 мая 2009

Вы должны использовать следующее:

DECIMAL(m,a)

m - это общее количество цифр, которое может иметь ваше десятичное число.

a - максимальное количество цифр, которое вы можете иметь после десятичной точки.

http://www.tsqltutorials.com/datatypes.php содержит описания всех типов данных.

41 голосов
/ 02 мая 2009

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

Так что, если вы положите PI в Decimal(18,0), он будет записан как 3?

Если вы положите PI в Decimal(18,2), он будет записан как 3.14?

Если вы введете PI в Decimal(18,10), то будет записано как 3.1415926535.

31 голосов
/ 16 июня 2015

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


Точность => Байт хранения

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

Он может хранить от 0 до 9 999 999,99 (7-значный инфронт + 2 цифры после десятичной точки = всего 9 цифр), что достаточно для большинства значений.

6 голосов
/ 17 февраля 2013

В MySQL DB decimal(4,2) позволяет вводить всего 4 цифры. Как видно из decimal(4,2), это означает, что вы можете ввести всего 4 цифры, из которых две цифры предназначены для хранения после десятичной точки.

Итак, если вы введете 100.0 в базу данных MySQL, появится сообщение об ошибке типа «Out of Range Value for column».

Итак, вы можете ввести только в этом диапазоне: от 00.00 до 99.99.

5 голосов
/ 23 марта 2018

Вы можете попробовать это

decimal(18,1)

Длина чисел должна быть полностью 18. Длина чисел после десятичной точки должна быть только 1 и не более этого.

3 голосов
/ 02 мая 2009

Остальные ответы верны. Предположим, что ваши примеры отражают весь спектр возможностей, которые вы хотите DECIMAL(3, 1). Или DECIMAL(14, 1) разрешит всего 14 цифр. Твоя работа - думать о том, чего достаточно.

0 голосов
/ 22 ноября 2017
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)
...