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


273

Я пытаюсь выяснить десятичный тип данных столбца в SQL Server. Мне нужно иметь возможность хранить значения, как 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»
Арун,

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

Ссылка не работает
Ибрагим Махрир

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 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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.