CodeGym /Cours /SQL SELF /Conversion des types de données avec CAST() et :: — exemp...

Conversion des types de données avec CAST() et :: — exemples et particularités

SQL SELF
Niveau 5 , Leçon 3
Disponible

Imagine que tu veux additionner deux nombres, mais qu’un des paramètres est stocké comme une chaîne de caractères. Ou alors, tu veux filtrer des données par année, mais la date est stockée au format complet avec l’heure. PostgreSQL risque de ne pas trop kiffer ton idée, et tu vas devoir intervenir pour convertir les données dans le bon type.

La conversion de types aide à :

  • Simplifier le traitement des données pour pouvoir les utiliser dans des calculs.
  • Créer des données plus lisibles et structurées pour l’export ou l’analyse.
  • Éliminer les bugs liés aux incompatibilités de types de données.

Bases de la conversion de types de données : CAST() et ::

1. CAST() — le grand frère de toute conversion

La fonction CAST(), c’est la façon "officielle" de convertir une valeur d’un type de données à un autre. Elle fait office de traducteur universel.

Syntaxe :

CAST(valeur AS type_de_donnée_cible)

Exemple 1 : Conversion d’une chaîne en nombre.

SELECT CAST('123' AS INTEGER); -- Résultat : 123

Exemple 2 : Conversion d’un nombre en chaîne.

SELECT CAST(123 AS TEXT); -- Résultat : '123'

Exemple 3 : Conversion d’une date en chaîne.

SELECT CAST(NOW() AS TEXT); -- Résultat : '2023-10-25 15:00:00.000000'

2. L’opérateur :: — une alternative concise

Si CAST() te semble un peu trop verbeux, PostgreSQL propose la syntaxe ::. C’est une façon raccourcie de convertir, super populaire parce qu’elle est rapide à écrire.

Syntaxe :

valeur::type_de_donnée_cible

Exemple 1 : Conversion d’une chaîne en nombre.

SELECT '123'::INTEGER; -- Résultat : 123

Exemple 2 : Conversion d’un nombre en chaîne.

SELECT 123::TEXT; -- Résultat : '123'

Exemple 3 : Conversion d’une date en chaîne.

SELECT NOW()::TEXT; -- Résultat : '2023-10-25 15:00:00.000000'

Exemples concrets d’utilisation de la conversion de types

1. Conversion de nombres et de chaînes

Imaginons que tu as une table students où la colonne student_id est stockée comme une chaîne, mais tu veux la comparer à une valeur numérique. Sans conversion, ça ne marchera pas.

student_id first_name last_name birth_date grade
101 Alex Lin 2008-03-15 9
102 Maria Chi 2009-07-22 8
103 Axel Ivy 2007-11-30 10
104 Nat Sok 2008-01-18 9
105 Pol Frez 2009-05-05 8

Du coup, dans la requête il faut convertir explicitement la colonne student_id en nombre :

SELECT *
FROM students
WHERE student_id::INTEGER = 101;

Même requête avec CAST() :

SELECT *
FROM students
WHERE CAST(student_id AS INTEGER) = 101;

Conversion de dates

Quand tu veux extraire une partie de la date ou la convertir en chaîne, la conversion de types est aussi super utile. Par exemple, tu as une table courses avec les dates de début des cours dans la colonne start_date.

course_id course_name start_date
1 Introduction à Python 2025-01-15
2 Bases de SQL 2025-03-01
3 Analyse de données 2025-05-10
4 Développement web 2025-06-20
5 Machine learning 2025-09-05

Exemple : Extraire l’année sous forme de nombre.

SELECT start_date::DATE, start_date::TEXT, start_date::TIMESTAMP
FROM courses;

Le résultat sera alors :

start_date (DATE) start_date (TEXT) start_date (TIMESTAMP)
2025-01-15 2025-01-15 2025-01-15 00:00:00
2025-03-01 2025-03-01 2025-03-01 00:00:00
2025-05-10 2025-05-10 2025-05-10 00:00:00
2025-06-20 2025-06-20 2025-06-20 00:00:00
2025-09-05 2025-09-05 2025-09-05 00:00:00

Exemple : Convertir une date en "chaîne pure".

SELECT TO_CHAR(start_date, 'DD-MM-YYYY')

Le résultat sera alors :

to_char
15-01-2025
01-03-2025
10-05-2025
20-06-2025
05-09-2025

Erreur : Quand la conversion casse tout ?

Le coup de la conversion de données ne marche pas toujours. Parfois, PostgreSQL te fait bien comprendre qu’il "ne pige pas" ce que tu veux faire. Exemple classique : tu essaies de convertir un texte qui ressemble à un nombre, mais il y a des caractères en trop dans la chaîne.

Exemple d’erreur :

SELECT '123abc'::INTEGER;
-- ERREUR :  syntaxe d’entrée invalide pour le type integer : "123abc"

Pour éviter ce genre de souci, assure-toi que les données peuvent vraiment être converties dans le type cible à l’avance. Par exemple, tu peux utiliser des expressions régulières ou des vérifications supplémentaires.

2
Mission
SQL SELF, niveau 5, leçon 3
Bloqué
Conversion d'une chaîne en nombre
Conversion d'une chaîne en nombre
2
Mission
SQL SELF, niveau 5, leçon 3
Bloqué
Conversion de dates et calculs
Conversion de dates et calculs
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION