Avancé · 20 min
Fonctions de chaînes et de dates : préparer un rapport lisible
Concaténer, mesurer et transformer du texte ; extraire année/mois et calculer une différence entre deux dates.
Contexte
Un nom de client vient rarement déjà « prêt à afficher » : il faut souvent le recomposer, et une date brute (2026-03-12) doit devenir une année, un mois, ou un nombre de jours écoulés pour être utile dans un rapport.
Explication
Chaînes (portable entre SGBD à quelques variantes près) :
||concatène deux chaînes (CONCAT()en MySQL/SQL Server).LENGTH(texte)compte les caractères.UPPER/LOWERchangent la casse.
Dates (SQLite ; l'idée se retrouve partout, la syntaxe varie) :
strftime('%Y', date)extrait l'année (texte) ;strftime('%Y-%m', date)l'année-mois — pratique pour unGROUP BYmensuel car ce texte se trie déjà chronologiquement.julianday(date)convertit une date en nombre ; la différence de deuxjuliandaydonne un nombre de jours entre deux dates.CAST(x AS INTEGER)force un résultat texte/décimal en entier, utile aprèsstrftime.
SELECT strftime('%Y', col1) AS annee FROM une_table;
SELECT julianday(col1) - julianday(col2) AS jours FROM une_table;
Exemple guidé
Regrouper les commandes par mois (base boutique) :
SELECT strftime('%Y-%m', date_commande) AS mois, COUNT(*) AS nb_commandes
FROM commandes
GROUP BY mois
ORDER BY mois
LIMIT 6;
Le format AAAA-MM a une propriété précieuse : le trier comme du texte revient à le trier chronologiquement, sans avoir besoin de reconstruire une vraie date. Pour un délai (par exemple entre une commande et son paiement), on soustrait deux julianday et on caste en entier pour obtenir un nombre de jours propre.
À retenir
|| concatène, LENGTH mesure. strftime('%Y', ...) ou ('%Y-%m', ...) extrait année/mois pour grouper proprement dans le temps. julianday(b) - julianday(a) donne un nombre de jours entre deux dates ; CAST ... AS INTEGER nettoie le résultat.