Voici trois options pour convertir un entier en une valeur décimale dans SQL Server à l'aide de T-SQL.
Le CAST()
Fonction
Le CAST()
convertit une expression d'un type de données en un autre :
SELECT CAST(275 AS DECIMAL(5, 2));
Résultat :
275.00
Dans cet exemple, nous avons converti un entier (275
) à une valeur décimale avec une précision de 5
et avec 2
décimales.
Décimal et numérique sont des synonymes et peuvent être utilisés de manière interchangeable. Par conséquent, nous pouvons ajuster notre exemple comme suit pour obtenir le même résultat :
SELECT CAST(275 AS NUMERIC(5, 2));
Résultat :
275.00
Il est important de se rappeler d'ajuster la précision selon les besoins :
SELECT CAST(18301275 AS DECIMAL(10, 2));
Résultat :
18301275.00
Si l'argument précision n'est pas assez grand, une erreur se produit :
SELECT CAST(18301275 AS DECIMAL(9, 2));
Résultat :
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting int to data type numeric.
Le CONVERT()
Fonction
Le CONVERT()
la fonction fait la même chose que CAST()
, sauf avec une syntaxe légèrement différente :
SELECT CONVERT(DECIMAL(5, 2), 275);
Résultat :
275.00
Utiliser un opérateur arithmétique
Une autre option consiste à utiliser un opérateur arithmétique, tel qu'un opérateur de multiplication :
SELECT 275 * 1.00;
Résultat :
275.00
Dans cet exemple, nous multiplions l'entier par 1.00
.
Dans SQL Server, chaque fois qu'un opérateur combine des expressions de différents types de données, le type de données avec la priorité la plus faible est d'abord converti en type de données avec la priorité la plus élevée. L'opération renvoie ensuite le type de données de l'argument avec la priorité la plus élevée.
Dans SQL Server, la décimale a une priorité supérieure à l'entier.
En le multipliant par 1,00, nous ne modifions pas la partie entière. Nous le convertissons simplement en décimal et ajoutons la partie fractionnaire.
Voir Priorité des types de données dans SQL Server pour une liste des types de données par ordre de priorité.