Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctionnement de CAST() dans SQL Server

Dans SQL Server, le CAST() convertit une expression d'un type de données en un autre.

Voici un aperçu rapide de la fonction avec des exemples.

Syntaxe

La syntaxe ressemble à ceci :

CAST ( expression AS data_type [ ( length ) ] )  

expression est l'expression à convertir, data_type est le nouveau type de données, et length est une longueur facultative pour le nouveau type de données.

Exemple

Voici un exemple de conversion d'une chaîne en décimal :

SELECT CAST('007' AS DECIMAL(5,2));

Résultat :

7.00

Chaîne à ce jour

Voici un exemple de conversion d'une chaîne en une date :

SELECT CAST('09 Feb 2030' AS date);

Résultat :

2030-02-09

Dans ce cas, le CAST() fonction a été en mesure de déterminer quelles parties de date sont lesquelles parce que j'ai fourni la date dans un format qu'il reconnaît.

La transmission d'une valeur qui ne peut pas être convertie en date entraîne une erreur :

SELECT CAST('Next Xmas' AS date);

Résultat :

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

Paramètres régionaux

La langue de la session en cours peut faire une différence dans la façon dont les dates sont interprétées.

Voici ce qui se passe lorsque vous utilisez la langue britannique :

SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);

Résultat :

2030-02-09

Dans ce cas, la date a été interprétée comme étant le 9 février.

Changeons la langue en us_English :

SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);

Résultat :

2030-09-02

Cette fois, il a interprété la date comme étant le deuxième jour de septembre.

Concaténation de chaînes

Voici un exemple de conversion d'une valeur numérique en chaîne afin de concaténer la valeur avec une chaîne :

SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));

Résultat :

Likes: 178

Voici ce qui se passe si nous ne le diffusons pas :

SELECT 'Likes: ' + 178;

Résultat :

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Likes: ' to data type int.

Lorsque vous tentez de concaténer deux valeurs avec des types de données différents, SQL Server doit convertir implicitement l'une des valeurs pour utiliser le type de données de l'autre, afin qu'elles soient toutes deux du même type de données avant de pouvoir effectuer la concaténation. Il suit les règles de priorité des types de données pour effectuer cette conversion.

Dans SQL Server, le INT le type de données a une priorité plus élevée que VARCHAR .

Par conséquent, dans l'exemple ci-dessus, SQL Server tente de convertir la chaîne en entier. Mais cela échoue car la chaîne ne peut pas être convertie en entier.

Tronquer le texte

Une petite astuce pratique que nous pouvons effectuer avec le CAST() fonction est de tronquer les chaînes plus longues à une longueur plus lisible.

Voici un exemple de texte tronqué sélectionné dans une table de base de données :

SELECT
    ProductName,
    CAST(ProductName AS VARCHAR(20)) AS Truncated
FROM Products;

Résultat :

+---------------------------------+----------------------+
| ProductName                     | Truncated            |
|---------------------------------+----------------------|
| Left handed screwdriver         | Left handed screwdri |
| Long Weight (blue)              | Long Weight (blue)   |
| Long Weight (green)             | Long Weight (green)  |
| Sledge Hammer                   | Sledge Hammer        |
| Chainsaw                        | Chainsaw             |
| Straw Dog Box                   | Straw Dog Box        |
| Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu |
| Right handed screwdriver        | Right handed screwdr |
+---------------------------------+----------------------+

Plus d'informations

Le CAST() la fonction fonctionne de la même manière que la fonction CONVERT() fonction, et de nombreuses conversions de données peuvent être effectuées en utilisant l'une ou l'autre. Cela dit, il y a des différences entre eux.

Voir la documentation de Microsoft pour CAST() et CONVERT() pour plus d'informations sur l'utilisation de cette fonction.