Travailler avec les types de données

Effectué

Les colonnes et les variables utilisées dans Transact-SQL ont chacune 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

Binary

Autre

TINYINT

float

char

Date

binary

cursor

SMALLINT

real

varchar

time

varbinary

hierarchyid

int

texte

DATETIME

image

sql_variant

bigint

NCHAR

datetime2

table

bit

NVARCHAR

smalldatetime

timestamp

decimal/numeric

ntext

datetimeoffset

UNIQUEIDENTIFIER

numeric

Xml

money

Geography

SMALLMONEY

geometry

Notes

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

Conversion de type de données

Les valeurs des types de données compatibles peuvent être converties implicitement si nécessaire. Par exemple, supposez que vous pouvez utiliser l’opérateur + pour ajouter un nombre + à 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 les valeurs d’un type de données en un autre. Par exemple, si vous essayez d’utiliser + pour concaténer une valeur de type varchar et une valeur de type decimal, une erreur se produit, sauf si vous convertissez d’abord la valeur numérique en un type de données de chaîne compatible.

Notes

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 figurant dans la Documentation de référence sur Transact-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 à base de 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 - Black, 58

706: HL Road Frame - Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

Toutefois, supposons que la colonne Size de la table Production.Product est une colonne nvarchar (longueur variable, données de texte Unicode) qui contient des tailles numériques (par exemple, 58) et des tailles textuelles (telles que « S », « M » ou « L »). La requête suivante tente de convertir les valeurs de cette colonne en un 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 souhaiterez peut-être 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

NULL

NULL

...

Les valeurs qui peuvent être converties en type de données numériques sont retournées sous forme de valeurs décimales, et les valeurs incompatibles sont retournées comme NULL, ce qui sert à indiquer qu’une valeur est inconnue.

Notes

Nous examinerons 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 - Black, 58

706: HL Road Frame - Red, 58

707: Sport-100 Helmet, Red

708: Sport-100 Helmet, Black

...

Tout 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 :

DateDébutVente

StartDate

FormattedStartDate

2002-06-01T00:00:00

Jun 1 2002 12:00AM

6/1/2002

2002-06-01T00:00:00

Jun 1 2002 12:00AM

6/1/2002

2005-07-01T00:00:00

Jul 1 2005 12:00AM

7/1/2005

2005-07-01T00:00:00

Jul 1 2005 12:00AM

7/1/2005

...

...

...

Notes

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érence sur Transact-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 :

ValDate

MoneyValue

2021-01-01T00:00:00

199.99

Comme avec CAST et CONVERT, PARSE a une variante TRY_PARSE qui retourne les valeurs incompatibles comme NULL.

Notes

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 les concepts de précision et d’échelle, consultez la Documentation de référence sur Transact-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 :

ProductID

Price

680

$1432.00

706

$1432.00

707

35,00 $

...

...