Каким должен быть лучший способ сохранить процентное значение в SQL-Server?

Я хочу сохранить значение, представляющее процент на SQL-сервере, какой тип данных должен быть предпочтительным?

Ответ 1

десятичный (p, s) и числовой (p, s)

p (точность):

Максимальное общее количество десятичных цифр, которые будут сохранены (как слева, так и справа от десятичной точки)


s (масштаб):

Число десятичных цифр, которое будет храниться справа от десятичной точки (- > s, определяет количество знаков после запятой)


0 <= s <= p.

  • p... общее количество цифр
  • s... число цифр справа от десятичной точки
  • p-s... число цифр слева от десятичной точки

Пример:

CREATE TABLE dbo.MyTable
( MyDecimalColumn decimal(5,2)
 ,MyNumericColumn numeric(10,5)
);

INSERT INTO dbo.MyTable VALUES (123, 12345.12);

SELECT MyDecimalColumn, MyNumericColumn FROM dbo.MyTable;

Результат:

MyDecimalColumn: 123.00 (p=5, s=2)

MyNumericColumn: 12345.12000 (p=10, s=5)

ссылка: msdn.microsoft.com

Ответ 2

Вы должны использовать decimal (p, s) в 99.9% случаев.

Проценты - это только концепция презентации: 10% все равно 0,1.

Просто выберите точность и масштаб для наивысших ожидаемых значений/желаемых знаков после запятой, если они выражены как действительные числа. Вы можете иметь p = s для значений < 100% и просто решайте на основе десятичных знаков.

Однако, если вам нужно сохранить 100% или 1, вам понадобится p = s + 1.

Это позволяет до 9.xxxxxx или 9xx.xxxx%, поэтому я бы добавил контрольное ограничение, чтобы оно не превышало 1, если это все, что мне нужно.

Ответ 3

Я думаю, decimal (p, s) следует использовать, а s представляет процентную способность. "p" может быть равным 1, так как нам не понадобится больше одного байта, поскольку каждая цифра в левой части точки равна одному проценту, поэтому значение p должно быть не менее s + 1, чтобы вы могли хранить до 1000%. но SQL не позволяет 'p' быть меньше, чем s.

Примеры: 28.2656579879% должно быть десятичным (13, 12) и должно быть сохранено 00.282656579879 128.2656579879% должно быть десятичным (13, 12) и должно быть сохранено 01.282656579879

28% следует хранить в десятичной форме (3,2), как 0,28 128% должны храниться в десятичной форме (3,2) как 1,28

Примечание: если вы знаете, что не достигнете 100% (т.е. ваше значение всегда будет меньше 100%, чем использование десятичного числа (s, s), если оно будет, используйте десятичную (s + 1, с).

И так далее

Ответ 4

Я согласен, DECIMAL - это место, где вы должны хранить этот тип номера. Но чтобы облегчить решение, сохраните его в процентах от 1, а не в процентах от 100. Таким образом, вы можете точно хранить количество десятичных знаков, которое вам нужно, независимо от "целого" числа. Поэтому, если вы хотите 6 знаков после запятой, используйте DECIMAL (9, 8) и 23.3436435%, вы храните 0.23346435. Изменение его на 23.346435% - проблема отображения, а не проблема с хранением, а большинство языков презентаций/авторов отчетов и т.д. Способны изменять отображение для вас.

Ответ 5

Тип данных столбца должен быть десятичным.