Je veux stocker une valeur qui représente un pourcentage dans SQL Server, quel type de données doit être préféré?
décimal (p, s) et numérique (p, s)
p (précision):
Le nombre total maximal de chiffres décimaux qui seront stockés (à gauche et à droite du séparateur décimal)
s (échelle):
Le nombre de chiffres décimaux qui seront stockés à droite de la virgule décimale (-> s définit le nombre de décimales)
0 <= s <= p.
Exemple:
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;
Résultat:
MyDecimalColumn: 123.00 (p=5, s=2)
MyNumericColumn: 12345.12000 (p=10, s=5)
Vous devez utiliser décimal (p, s) dans 99,9% des cas.
Le pourcentage n'est qu'un concept de présentation: 10% est toujours 0,1.
Choisissez simplement la précision et l'échelle pour les valeurs attendues les plus élevées/décimales souhaitées lorsqu'elles sont exprimées en nombres réels. Vous pouvez avoir p = s pour des valeurs <100% et simplement décider en fonction des décimales.
Cependant, si vous devez stocker 100% ou 1, vous aurez besoin de p = s + 1.
Cela permet alors jusqu'à 9.xxxxxx ou 9xx.xxxx%, donc j'ajouterais une contrainte de vérification pour le garder au maximum 1 si c'est tout ce dont j'ai besoin.
Je suis d'accord, DECIMAL est l'endroit où vous devez stocker ce type de numéro. Mais pour rendre la décision plus facile, enregistrez-la sous forme de pourcentage de 1 et non de 100. De cette façon, vous pouvez stocker exactement le nombre de décimales dont vous avez besoin, quel que soit le nombre "entier". Donc, si vous voulez 6 décimales, utilisez DECIMAL (9, 8) et pour 23,3436435%, vous stockez 0,23346435. Le changer à 23,346435% est un problème d'affichage, pas un problème de stockage, et la plupart des langues de présentation/rédacteurs de rapports, etc. sont capables de changer l'affichage pour vous.
Je pense que décimal (p, s) devrait être utilisé alors que s représente la capacité en pourcentage. le `` p '' pourrait être égal à 1, car nous n'aurons jamais besoin de plus d'un octet, car chaque chiffre du côté gauche du point est de un pour cent, de sorte que le p doit être d'au moins s + 1, afin que vous puissiez stocker jusqu'à 1000%. mais SQL ne permet pas au "p" d'être plus petit que le s.
Exemples: 28,2656579879% doivent être décimaux (13, 12) et doivent être stockés 00,282656579879 128,2656579879% doivent être décimaux (13, 12) et doivent être stockés 01,282656579879
28% doivent être stockés en décimal (3,2) comme 0,28 128% doivent être stockés en décimal (3,2) comme 1,28
Remarque: si vous savez que vous n'atteindrez pas les 100% (c'est-à-dire que votre valeur sera toujours inférieure à 100% par rapport à la décimale (s, s), si c'est le cas, utilisez la décimale (s + 1, s).
Etc
Le type de données de la colonne doit être décimal.