Résumé : dans ce tutoriel, vous apprendrez à utiliser la fonction CAST()
de SQL Server pour convertir une valeur ou une expression d’un type à un autre.
Introduction à la fonction CAST() de SQL Server
Voyons la requête suivante :
Code language: PHP (php)SELECT 1 + '1' AS result;
Elle renvoie 2 comme nombre :
result-----------2(1 row affected)
Dans cette requête, SQL Server convertit implicitement la chaîne de caractères '1'
en nombre 1
.
Lorsque vous utilisez deux valeurs avec des types de données différents, SQL Server essaie de convertir le type de données inférieur en type supérieur avant de pouvoir traiter le calcul. C’est ce qu’on appelle une conversion implicite dans SQL Server.
Par opposition aux conversions implicites, nous avons les conversions explicites où vous appelez la fonction CAST()
pour convertir explicitement une valeur d’un type à un autre :
Code language: PHP (php)SELECT 1 + CAST(1 AS INT) result;
La syntaxe de la fonction CAST()
est la suivante :
Code language: CSS (css)CAST ( expression AS target_type )
Dans cette syntaxe :
-
expression
peut être une valeur littérale ou une expression valide de tout type qui sera convertie. -
target_type
est le type de données cible vers lequel vous voulez convertir l’expression. Il comprendINT
BIT
SQL_VARIANT
, etc. Notez qu’il ne peut pas s’agir d’un type de données alias. -
length
est un nombre entier facultatif qui spécifie la longueur du type cible. La valeur par défaut delength
est 30.
La fonction CAST()
renvoie l’expression convertie en type de données cible.
Exemples de la fonction CAST() du serveur SQL
Prenons quelques exemples d’utilisation de la fonction CAST()
.
A) Exemple d’utilisation de la fonction CAST() pour convertir un nombre décimal en un nombre entier
Cet exemple utilise la fonction CAST()
pour convertir le nombre décimal 5.95
en un nombre entier:
Code language: CSS (css)SELECT CAST(5.95 AS INT) result;
Voici la sortie :
result-----------5(1 row affected)
B) Utiliser la fonction CAST() pour convertir un nombre décimal en un autre nombre décimal de longueur différente
L’exemple suivant utilise la fonction CAST()
pour convertir le nombre décimal 5.95 en un autre nombre décimal avec l’échelle zéro:
Code language: CSS (css)SELECT CAST(5.95 AS DEC(3,0)) result;
La sortie est la suivante:
result-------6
Lorsque vous convertissez une valeur des types de données à différents endroits, SQL Server renvoie un résultat tronqué ou une valeur arrondie en fonction des règles suivantes :
Depuis le type de données. Type | Au Type de données | Comportement |
---|---|---|
numérique | numérique | Rond |
numérique | int | Truncate | numérique | argent | Rond | argent | int | Rond |
money | numérique | Rond |
float | int | Truncate |
float | numeric | Round |
float | datetime | Round | datetime | int | Rond |
C) Utilisation de la fonction CAST() pour convertir une chaîne de caractères en une valeur de temps de date exemple
Cet exemple utilise la fonction CAST()
pour convertir la chaîne de caractères '2019-03-14'
en un temps de date:
Code language: PHP (php)SELECT CAST('2019-03-14' AS DATETIME) result;
La sortie est :
Code language: CSS (css)result-----------------------2019-03-14 00:00:00.000(1 row affected)
D) Utilisation de la fonction CAST() avec les opérateurs arithmétiques
Nous allons utiliser les tables sales.orders
et sales.order_items
de la base de données exemple pour la démonstration :
L’instruction suivante utilise la fonction CAST()
pour convertir les ventes mensuelles de 2017 en valeurs entières.
Code language: PHP (php)SELECT MONTH(order_date) month, CAST(SUM(quantity * list_price * (1 - discount)) AS INT) amountFROM sales.orders o INNER JOIN sales.order_items i ON o.order_id = i.order_idWHERE YEAR(order_date) = 2017GROUP BY MONTH(order_date)ORDER BY month;
L’image suivante montre la sortie :
Dans ce tutoriel, vous avez appris à utiliser la fonction CAST()
de SQL Server pour convertir une valeur d’un type à un autre.