Travailler avec les types de données

Effectué

Les colonnes et les variables utilisées dans Transact-SQL ont chacun un type de données. Le comportement des valeurs dans les expressions dépend du type de données de la colonne ou de la variable référencée. Par exemple, comme vous l’avez vu précédemment, vous pouvez utiliser l’opérateur + pour concaténer deux valeurs de chaîne ou ajouter deux valeurs numériques.

Le tableau suivant répertorie les types de données courants pris en charge dans une base de données SQL Server.

Valeur numérique exacte

Valeur numérique approchée

Caractère

Date/Heure

Binaire

Autre

tinyint

flotter

car

date

binaire

cursor

smallint

réel

varchar

heure

varbinary

hierarchyid

int

texte

datetime

image

sql_variant

bigint

nchar

datetime2

table

bit

nvarchar

smalldatetime

horodatage

decimal/numeric

ntext

datetimeoffset

uniqueidentifier

numérique

xml

argent

geography

smallmoney

géométrie

Remarque

Pour plus d’informations sur les différents types de données et leurs attributs, consultez la documentation de référenceTransact-SQL.

Conversion de type de données

Les valeurs des types de données compatibles peuvent être converties implicitement si nécessaire. Par exemple, supposons que vous pouvez utiliser l’opérateur + pour ajouter un nombre entier à un nombre décimal , ou pour concaténer une valeur char de longueur fixe et une valeur varchar de longueur variable. Toutefois, dans certains cas, vous devrez peut-être convertir explicitement des valeurs d’un type de données vers un autre , par exemple, essayer + de concaténer une valeur varchar et une valeur décimale entraîne une erreur, sauf si vous convertissez d’abord la valeur numérique en type de données de chaîne compatible.

Remarque

Les conversions implicites et explicites s’appliquent à certains types de données, et certaines conversions ne sont pas possibles. Pour plus d’informations, utilisez le graphique dans la documentation de référenceTransact-SQL.

T-SQL comprend des fonctions pour vous aider à effectuer explicitement une conversion entre des types de données

CAST et TRY_CAST

La fonction CAST convertit une valeur en un type de données spécifié si la valeur est compatible avec le type de données cible. Une erreur sera renvoyée en cas d’incompatibilité.

Par exemple, la requête suivante utilise CAST pour convertir les valeurs entières de la colonne ProductID en valeurs varchar (avec un maximum de 4 caractères) afin de les concaténer avec une autre valeur basée sur des caractères :

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

Les résultats possibles de cette requête peuvent ressembler à ceci :

ProductName

680 : HL Road Frame - Noir, 58

706 : HL Road Frame - Rouge, 58

707 : Casque Sport-100, Rouge

708 : Casque Sport-100, Noir

...

Toutefois, supposons que la colonne Size de la table Production.Product est une colonne nvarchar (longueur variable, données texte Unicode) qui contient des tailles numériques (comme 58) et des tailles textuelles (comme « S », « M » ou « L »). La requête suivante tente de convertir des valeurs de cette colonne en type de données entier :

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

Cette requête entraîne le message d’erreur suivant :

Error: Conversion failed when converting the nvarchar value ’M’ to data type int.

Étant donné qu’au moins certaines des valeurs de la colonne sont numériques, vous pouvez convertir ces valeurs et ignorer les autres. Vous pouvez utiliser la fonction TRY_CAST pour convertir les types de données.

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

Cette fois, les résultats peuvent ressembler à ceci :

NumericSize

58

58

ZÉRO

ZÉRO

...

Les valeurs qui peuvent être converties en type de données numérique sont retournées sous forme de valeurs décimales , et les valeurs incompatibles sont retournées sous la forme NULL, qui est utilisée pour indiquer qu’une valeur est inconnue.

Remarque

Nous allons explorer les considérations relatives à la gestion des valeurs NULL plus loin dans cette unité.

CONVERT et TRY_CONVERT

CAST est la fonction ANSI SQL standard pour la conversion de types de données, et est utilisée dans de nombreux systèmes de base de données. Dans Transact-SQL, vous pouvez également utiliser la fonction CONVERT, comme illustré ici :

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

Une fois encore, cette requête retourne la valeur convertie dans le type de données spécifié, comme suit :

ProductName

680 : HL Road Frame - Noir, 58

706 : HL Road Frame - Rouge, 58

707 : Casque Sport-100, Rouge

708 : Casque Sport-100, Noir

...

Comme CAST, CONVERT a une variante TRY_CONVERT qui retourne NULL pour les valeurs incompatibles.

Un autre avantage de l’utilisation de CONVERT par rapport à CAST est que CONVERT comprend également un paramètre qui vous permet de spécifier un style de mise en forme lors de la conversion de valeurs numériques et de date en chaînes. Par exemple, considérez la requête suivante :

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

Les résultats de cette requête peuvent se présenter comme suit :

SellStartDate

Date de début

FormattedStartDate

2002-06-01T00:00:00.0000000

1er juin 2002 12:00AM

6/1/2002

2002-06-01T00:00:00.0000000

1er juin 2002 12:00AM

6/1/2002

2005-07-01T00:00:00.0000000

1er juillet 2005 12:00AM

7/1/2005

2005-07-01T00:00:00.0000000

1er juillet 2005 12:00AM

7/1/2005

...

...

...

Remarque

Pour en savoir plus sur les codes de mise en forme de style que vous pouvez utiliser avec CONVERT, consultez la documentation de référenceTransact-SQL.

PARSE et TRY_PARSE

La fonction PARSE est conçue pour convertir des chaînes mises en forme qui représentent des valeurs numériques ou de date/heure. Par exemple, considérez la requête suivante (qui utilise des valeurs littérales plutôt que des valeurs de colonnes dans une table) :

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

Les résultats de cette requête se présentent comme suit :

DateValue

MoneyValue

2021-01-01T00:00:00.0000000

199.99

De la même façon que CAST et CONVERT, PARSE a une variante TRY_PARSE qui retourne des valeurs incompatibles comme NULL.

Remarque

Lorsque vous utilisez des types de données de type decimal ou numeric, il se peut que vous deviez arrondir à un nombre entier ou définir la virgule décimale, ce qui est possible grâce à la précision et à l’échelle. Pour mieux comprendre ce concept de précision et d’échelle, consultez la documentation de référenceTransact-SQL.

STR

La fonction STR convertit une valeur numérique en varchar.

Par exemple :

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

Le résultat doit être similaire à ceci :

Identifiant produit

Prix

680

1432,00 $

706

1432,00 $

707

35,00 $

...

...