Как хранить десятичные значения в SQL Server?

273

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

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

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

Alex
источник

Ответы:

513

DECIMAL(18,0) позволит 0 цифр после запятой.

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

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

marc_s
источник
@marc_s, есть ли в любом случае хранить значение "4.5", где тип столбца является десятичным (4,2)? Когда я вставляю значение, оно изменяется на «4,50»
Арун,
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 есть описания всех типов данных.

DForck42
источник
3
Обычно он обозначается как DECIMAL (p, s), где p обозначает точность (максимально допустимые цифры в числе), а s обозначает масштаб (максимально допустимые цифры после десятичной точки).
RBT
Ссылка не работает
Ибрагим Махрир
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 и не более того.

Biddut
источник
6

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

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

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

Раджа Готово
источник
3
Почему это актуально, когда в вопросе четко указан 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)
Freya
источник