Fonctions de conversion

Les fonctions de conversion CAST et CONVERT permettent de convertir des expressions d'un type de données en un autre lorsque les conversions de types de données ne sont pas effectuées automatiquement par SQL Server. Par exemple, si vous comparez une expression char à une expression datetime, une expression smallint à une expression int ou encore des expressions char de longueurs différentes, SQL Server effectue automatiquement les conversions. C'est ce que l'on appelle une conversion implicite. L'utilisation de la fonction CAST ou CONVERT n'est pas nécessaire pour ce type de conversion. Vous pouvez toutefois utiliser ces fonctions dans les scénarios de conversion suivants :

  • lorsque deux expressions sont exactement de même type ;

  • lorsque deux expressions peuvent être converties de façon implicite ;

  • lorsque les types de données doivent être explicitement convertis.

Si vous tentez une conversion impossible (par exemple, convertir une expression char contenant des lettres en une valeur int), SQL Server affiche un message d'erreur.

Les fonctions de conversion CAST et CONVERT peuvent également être utilisées pour l'obtention de plusieurs formats de données spécifiques, ainsi que dans la liste de sélection, dans la clause WHERE ou partout où une expression est autorisée.

Si vous souhaitez que le code du programme Transact-SQL soit compatible avec SQL-92, optez pour la fonction CAST plutôt que pour la fonction CONVERT. En revanche, préférez la fonction CONVERT à la fonction CAST pour bénéficier des fonctionnalités de la fonction CONVERT.

Les informations suivantes sont nécessaires lors de l'utilisation des fonctions CAST et CONVERT :

  • l'expression à convertir (par exemple, pour établir un rapport de ventes, il faut convertir les données de vente du type monétaire en type caractère) ;

  • le type de données dans lequel convertir l'expression indiquée (par exemple, varchar ou tout autre type de données système fourni par SQL Server.

La conversion n'est valide que pour la durée d'utilisation de la fonction CAST ou CONVERT, sauf si la valeur convertie est stockée.

Faute de longueur spécifiée lors de la conversion du type de données, SQL Server applique automatiquement une longueur de 30 octets.

Exemples

Dans les exemples ci-dessous de conversion d'une colonne Title en colonne nvarchar(20), la fonction CAST est utilisée dans la première instruction SELECT et la fonction CONVERT dans la seconde instruction SELECT pour raccourcir la longueur des titres.

USE AdventureWorks;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO

ou

USE AdventureWorks;
GO
SELECT CONVERT(nvarchar(20), Title) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO

Voici l'ensemble de résultats obtenu pour ces deux requêtes.

Title                 Revision
--------------------  --------
Crank Arm and Tire M  0    
Front Reflector Brac  1    
Installing Replaceme  0    
Repair and Service G  0    
Training Wheels 2     1    

(5 row(s) affected)

Dans l'exemple suivant, la colonne HireDate qui est une colonne datetime, est convertie en colonne char(11).

USE AdventureWorks
GO
SELECT c.FirstName, c.LastName, CAST(e.HireDate AS char(11)) AS HireDate 
FROM HumanResources.Employee e 
JOIN Person.Contact c ON e.EmployeeID = c.ContactID
WHERE c.FirstName = 'Kim'
GO

Voici l'ensemble des résultats.

FirstName       LastName                       HireDate
---------       -----------------------        -----------
Kim             Abercrombie                    Dec 12 1997
Kim             Akers                          Mar 23 1998

(2 row(s) affected)