La fonction SQL CONVERT(), dans les systèmes MySQL et SQL Server, permet de convertir une donnée d’un type en un autre, de façon semblable à CAST(). La fonction permet par exemple de convertir une données de type FLOAT en INTEGER ou un DATE en DATETIME.
Attention : avec les Système de Gestion de Base de Donnée (SGBD) PostgreSQL et Oracle, la fonction CONVERT() permet de convertir une chaîne de caractère d’un encodage en un autre, tel qu’une conversion de UTF-8 à Latin-1 (ISO-8859-1).
Syntaxe
MySQL
La fonction peut s’utiliser dans une requête SQL en respectant la syntaxe suivante :
CONVERT(expression, type);
Le paramètre “expression” correspond à la donnée qui doit subir le transtypage. Le type de données peut être BINARY, CHAR, DATE, DATETIME, INTEGER ou TIME.
SQL Server
La même fonction s’utilise différemment avec SQL Server. La syntaxe est la suivante :
CONVERT ( type, expression );
Le paramètre “expression” correspond également à la donnée qui doit changer de type. Le type quand à lui peut contenir plus de possibilité, allant du type BINARY à TEXT, en passant par CHAR, VARCHAR, DATETIME, TIMESTAMP et bien d’autres.
Les possibilités de conversion sont résumées dans le tableau ci-dessous :
Source : http://msdn.microsoft.com/fr-fr/library/ms187928.aspx
Exemple
MySQL
Les requêtes SQL suivantes sont des exemples concret de conversion de type de données avec MySQL :
SELECT CONVERT(52.2, SIGNED INTEGER); -- résultat : 52 SELECT CONVERT(52.5, SIGNED INTEGER); -- résultat : 53 SELECT CONVERT(52.6, SIGNED INTEGER); -- résultat : 53 SELECT CONVERT(-52.6, SIGNED INTEGER); -- résultat : -53 SELECT CONVERT(52.2, UNSIGNED INTEGER); -- résultat : 52 SELECT CONVERT(52.5, UNSIGNED INTEGER); -- résultat : 53 SELECT CONVERT(52.6, UNSIGNED INTEGER); -- résultat : 53 SELECT CONVERT(-52.6, UNSIGNED INTEGER); -- résultat : 0 SELECT CONVERT('2014-11-01', DATETIME); -- résultat : 2014-11-01 00:00:00
SQL Server
Les requêtes ci-dessous représente le fonctionnement de la fonction avec SQL Server :
SELECT CONVERT(int, 52.79); -- résultat : 52 SELECT CONVERT(float, 52.79); -- résultat : 52.79 SELECT CONVERT(varchar, 63.3); -- résultat : '63.3' SELECT CONVERT(varchar(4), 63.3); -- résultat : '63.3' SELECT CONVERT(float, '63.3'); -- résultat : 63.3 SELECT CONVERT(datetime, '2014-11-01'); -- résultat : '2014-11-01 00:00:00.000' SELECT CONVERT(varchar, '01/11/2014', 101); -- résultat : '01/11/2014'