Я хочу зберегти значення, яке представляє відсоток на сервері SQL, який тип даних повинен бути кращим?
Я хочу зберегти значення, яке представляє відсоток на сервері SQL, який тип даних повинен бути кращим?
Відповіді:
десяткові (p, s) та числові (p, s)
p (точність):
Максимальна загальна кількість десяткових цифр, які будуть збережені (як ліворуч, так і праворуч від десяткової коми)
s (шкала):
Кількість десяткових цифр, які зберігатимуться праворуч від десяткової коми (-> s визначає кількість десяткових знаків)
0 <= s <= p.
Приклад:
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)
Ви повинні використовувати десяткові (p, s) у 99,9% випадків.
Відсоток - це лише концепція презентації: 10% - це все одно 0,1.
Просто виберіть точність і масштаб для найвищих очікуваних значень / бажаних знаків після коми, виражених як дійсні числа. Ви можете мати p = s для значень <100% і просто приймати рішення на основі десяткових знаків.
Однак якщо вам потрібно зберегти 100% або 1, тоді вам знадобиться p = s + 1.
Потім це дозволяє до 9.xxxxxx або 9xx.xxxx%, тому я додав би обмеження перевірки, щоб воно було максимум 1, якщо це все, що мені потрібно.
FLOAT
та DOUBLE
). Вони вам дійсно не потрібні, і вони можуть легко викликати проблеми. Щодо центів проти євро: Це нонсенс. DECIMAL
є точним типом даних; і зберігати 123,45, таким чином, точно так само, як 12345. Немає сенсу не зберігати суму в її валюті, а в допоміжній валюті в базі даних; це лише заплутає людей і може призвести до неправильних розрахунків та несподіваних результатів.
Я погоджуюсь, що DECIMAL - це місце, де слід зберігати номер цього типу. Але щоб полегшити прийняття рішення, зберігайте його як відсоток 1, а не як відсоток 100. Таким чином, ви зможете зберігати точно потрібну кількість десяткових знаків незалежно від «цілого» числа. Отже, якщо ви хочете 6 знаків після коми, використовуйте DECIMAL (9, 8), а для 23,3436435% ви зберігаєте 0,23346435. Зміна його на 23,346435% є проблемою відображення, а не проблемою зберігання, і більшість мов презентацій / редакторів звітів тощо здатні змінити дисплей для вас.
Я думаю , що слід використовувати десяткові (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 + 1, s).
І так далі