Я хочу сохранить значение, представляющее процент на SQL-сервере, какой тип данных должен быть предпочтительным?
Каким должен быть лучший способ сохранить процентное значение в SQL-Server?
Ответ 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)
Ответ 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
Тип данных столбца должен быть десятичным.