Fonctions Scalaires intégrées dans SQLite
Les fonctions scalaires dans SQLite sont des fonctions intégrées qui prennent un ou plusieurs arguments et renvoient une seule valeur. Elles permettent de manipuler et transformer des données directement dans vos requêtes SQL, ce qui peut simplifier grandement votre code et améliorer les performances en évitant des allers-retours entre la base de données et votre application.
Dans ce tutoriel, nous explorerons les fonctions scalaires les plus utiles de SQLite, avec des exemples concrets pour chacune.
Fonctions de manipulation de texte
Fonctions UPPER, LOWER et LENGTH
-- Création d'une table exempleCREATE TABLE utilisateurs ( id INTEGER PRIMARY KEY, nom TEXT, email TEXT);
-- Insertion de quelques donnéesINSERT INTO utilisateurs (nom, email) VALUES
-- Utilisation de UPPER() pour convertir en majusculesSELECT nom, UPPER(nom) AS nom_majuscules FROM utilisateurs;
-- Utilisation de LOWER() pour normaliser les emailsSELECT email, LOWER(email) AS email_normalisé FROM utilisateurs;
-- Utilisation de LENGTH() pour compter les caractèresSELECT nom, LENGTH(nom) AS longueur_nom FROM utilisateurs;
Dans cet exemple :
UPPER()
convertit une chaîne en majuscules, utile pour l’affichage ou les comparaisons insensibles à la casseLOWER()
convertit une chaîne en minuscules, souvent utilisé pour normaliser les données comme les emailsLENGTH()
compte le nombre de caractères, ce qui peut être utile pour valider ou filtrer des données
Fonctions SUBSTR, INSTR et REPLACE
-- Extraction d'une partie d'une chaîne avec SUBSTRSELECT email, SUBSTR(email, 1, INSTR(email, '@') - 1) AS nom_utilisateur, SUBSTR(email, INSTR(email, '@') + 1) AS domaineFROM utilisateurs;
-- Recherche de position avec INSTRSELECT nom, INSTR(nom, ' ') AS position_espace, SUBSTR(nom, 1, INSTR(nom, ' ') - 1) AS prénomFROM utilisateurs;
-- Remplacement de texte avec REPLACESELECT email, REPLACE(email, '@example.com', '@nouvelle-entreprise.com') AS nouvel_emailFROM utilisateurs;
Dans ces exemples :
SUBSTR(X, Y, Z)
extrait une sous-chaîne à partir de la position Y sur Z caractèresINSTR(X, Y)
trouve la position de Y dans X, très utile pour localiser des caractères spécifiquesREPLACE(X, Y, Z)
remplace toutes les occurrences de Y par Z dans X
Fonctions de manipulation de nombres
-- Création d'une table de produitsCREATE TABLE produits ( id INTEGER PRIMARY KEY, nom TEXT, prix REAL, stock INTEGER);
-- Insertion de quelques donnéesINSERT INTO produits (nom, prix, stock) VALUES ('Smartphone', 499.99, 25), ('Casque audio', 89.95, 50), ('Chargeur', 19.50, 100), ('Étui de protection', 24.75, 75);
-- Arrondissement avec ROUNDSELECT nom, prix, ROUND(prix) AS prix_arrondi, ROUND(prix, 1) AS prix_arrondi_1_décimaleFROM produits;
-- Valeur absolue avec ABSSELECT stock, ABS(stock - 50) AS écart_par_rapport_à_50FROM produits;
-- Fonction MAX et MIN sur des valeursSELECT nom, prix, stock, MAX(prix, 100) AS prix_minimum_100, MIN(stock, 80) AS stock_maximum_80FROM produits;
Dans ces exemples :
ROUND(X, Y)
arrondit X à Y décimales (Y est optionnel, 0 par défaut)ABS(X)
retourne la valeur absolue de XMAX(X, Y, ...)
etMIN(X, Y, ...)
retournent respectivement le maximum et le minimum des valeurs fournies
Fonctions conditionnelles
-- Utilisation de COALESCE pour gérer les valeurs NULLALTER TABLE produits ADD COLUMN promotion REAL;UPDATE produits SET promotion = 0.2 WHERE nom = 'Smartphone';UPDATE produits SET promotion = 0.1 WHERE nom = 'Casque audio';
SELECT nom, prix, promotion, COALESCE(promotion, 0) AS promotion_par_défaut, prix * (1 - COALESCE(promotion, 0)) AS prix_finalFROM produits;
-- Utilisation de IFNULLSELECT nom, prix, promotion, IFNULL(promotion, 0) AS promotion_ou_zéroFROM produits;
-- Utilisation de IIF (ou IF) pour les conditionsSELECT nom, stock, IIF(stock > 50, 'Stock suffisant', 'Stock à surveiller') AS état_stockFROM produits;
-- CASE pour les conditions plus complexes (bien que ce ne soit pas une fonction)SELECT nom, prix, CASE WHEN prix < 20 THEN 'Bas prix' WHEN prix BETWEEN 20 AND 100 THEN 'Prix moyen' ELSE 'Prix élevé' END AS catégorie_prixFROM produits;
Dans ces exemples :
COALESCE(X, Y, ...)
retourne le premier argument non NULLIFNULL(X, Y)
retourne Y si X est NULL, sinon X (équivalent à COALESCE avec 2 arguments)IIF(condition, valeur_si_vrai, valeur_si_faux)
est une forme simplifiée de CASE
Fonctions de date et heure
-- Obtenir la date et l'heure actuellesSELECT DATE('now') AS date_actuelle, TIME('now') AS heure_actuelle, DATETIME('now') AS date_heure_actuelle;
-- Manipulation de datesSELECT DATE('now') AS aujourd_hui, DATE('now', '+1 day') AS demain, DATE('now', '+1 month') AS mois_prochain, DATE('now', '+1 year') AS année_prochaine;
-- Extraire des parties d'une dateCREATE TABLE commandes ( id INTEGER PRIMARY KEY, client_id INTEGER, date_commande TEXT, montant REAL);
INSERT INTO commandes (client_id, date_commande, montant) VALUES (1, '2023-01-15 14:30:00', 120.50), (2, '2023-02-20 09:15:00', 75.25), (1, '2023-03-10 16:45:00', 200.00), (3, '2023-03-15 11:30:00', 50.75);
-- Extraire l'année, le mois et le jourSELECT date_commande, SUBSTR(date_commande, 1, 4) AS année, SUBSTR(date_commande, 6, 2) AS mois, SUBSTR(date_commande, 9, 2) AS jourFROM commandes;
SQLite ne possède pas autant de fonctions de date que d’autres SGBD, mais il propose les fonctions essentielles pour manipuler les dates et les heures.
Autres fonctions utiles
-- Fonction RANDOMSELECT RANDOM() AS nombre_aléatoire, ABS(RANDOM()) % 100 AS nombre_entre_0_et_99;
-- Fonction TYPEOF pour connaître le type de donnéesSELECT TYPEOF(42) AS type_entier, TYPEOF(3.14) AS type_réel, TYPEOF('Hello') AS type_texte, TYPEOF(NULL) AS type_null, TYPEOF(X'ABCD') AS type_blob;
-- Fonction QUOTE pour échapper des chaînesSELECT QUOTE('Ceci est une "citation"') AS chaîne_échappée;
Résumé des principales fonctions scalaires
Fonction | Paramètres | Description | Cas d’usage |
---|---|---|---|
ABS(X) | X: nombre | Retourne la valeur absolue de X | Calculer des écarts, distances |
COALESCE(X,Y,...) | X,Y,…: valeurs | Retourne la première valeur non NULL | Définir des valeurs par défaut |
IFNULL(X,Y) | X: valeur, Y: alternative | Retourne Y si X est NULL, sinon X | Gérer les valeurs manquantes |
IIF(B,X,Y) | B: condition, X: si vrai, Y: si faux | Retourne X si B est vrai, sinon Y | Logique conditionnelle simple |
INSTR(X,Y) | X: chaîne, Y: sous-chaîne | Position de Y dans X (1 = premier caractère) | Rechercher dans des chaînes |
LENGTH(X) | X: chaîne | Nombre de caractères dans X | Valider la longueur des entrées |
LOWER(X) | X: chaîne | Convertit X en minuscules | Normaliser des chaînes pour comparaison |
UPPER(X) | X: chaîne | Convertit X en majuscules | Mettre en forme pour affichage |
MAX(X,Y,...) | X,Y,…: valeurs | Retourne la plus grande valeur | Imposer une valeur minimale |
MIN(X,Y,...) | X,Y,…: valeurs | Retourne la plus petite valeur | Imposer une valeur maximale |
RANDOM() | Aucun | Entier aléatoire | Générer des données de test |
REPLACE(X,Y,Z) | X: chaîne, Y: à remplacer, Z: remplacement | Remplace Y par Z dans X | Formatage et nettoyage de données |
ROUND(X,Y) | X: nombre, Y: décimales | Arrondit X à Y décimales | Formatage numérique |
SUBSTR(X,Y,Z) | X: chaîne, Y: début, Z: longueur | Extrait une sous-chaîne | Extraire parties de chaînes |
TRIM(X,Y) | X: chaîne, Y: caractères à enlever | Supprime Y des extrémités de X | Nettoyage de données |
TYPEOF(X) | X: valeur | Retourne le type de X | Débogage et vérification de types |