Fonctions SQL
Rappel :
Par opposition aux fonctions de calcul SQL qui s'appliquent sur toute la table pour réaliser des agrégats (en ne renvoyant qu'une seule valeur par regroupement), les fonctions "mono-ligne" sont des fonctions au sens classique, qui s'appliquent à une ou plusieurs valeurs et renvoient une valeur en retour.
Les fonctions "mono-ligne" :
Manipulent des éléments de données
Acceptent des arguments en entrée et retournent des valeurs en sortie
Agissent sur chaque ligne
Retournent un seul résultat par ligne
Peuvent modifier les types de données
Exemple :
Traitement de chaîne
CONCAT, SUBSTR, LENGTH, INSRT, LPAD, TRIM
LOWER, UPPER, INITCAP
Traitement de date
MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY
SELECT sysdate FROM dual
Opérations mathématiques sur les dates :
SELECT sysdate + 10 FROM dual
Traitement numérique
ROUND, TRUNC
FLOOR, CEIL
MOD
Conversion
Conversion implicite
Conversion explicite : TO_DATE, TO_NUMBER, TO_CHAR
Générales
NVL (par exemple NVL(X,0) renvoie 0 si X vaut Null)
CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 END
Imbrication de fonctions : F3(F2(F1(col,arg1),arg2),arg3)
Méthode :
Les fonctions mono-ligne sont utilisées pour :
Transformer les données
Formater des dates et des nombres pour l'affichage
Convertir des types de données de colonnes
...
Exemple : Extraction de chaîne
La fonction SUBSTR(X, A, B)
renvoie les B caractères à partir du caractère A dans la chaîne X.
Complément :
Vous pouvez consulter Oracle : SQL[1], page 9 à 12, pour avoir une description plus détaillée des fonctions disponibles sous Oracle.
Rappel : BD "Gestion des intervenants" : Schéma relationnel
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)
Exemple : BD "Gestion des intervenants" : Question avec CASE
SELECT pknum AS cours,
CASE
WHEN type='C' THEN 'Cours'
WHEN type='TD' THEN 'Travaux dirigés'
WHEN type='TP' THEN 'Travaux pratiques'
END AS type_label
FROM tCours
COURS TYPE_LABEL
----- -----------------
1 Cours
2 Travaux dirigés