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

  • ...

ExempleExtraction 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

  • Fonctions SQL

  • Vous pouvez consulter Oracle : SQL[1], page 9 à 12, pour avoir une description plus détaillée des fonctions disponibles sous Oracle.

RappelBD "Gestion des intervenants" : Schéma relationnel

1
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
2
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)

ExempleBD "Gestion des intervenants" : Question avec CASE

1
SELECT pknum AS cours,
2
  CASE 
3
    WHEN type='C' THEN 'Cours' 
4
    WHEN type='TD' THEN 'Travaux dirigés'
5
    WHEN type='TP' THEN 'Travaux pratiques'
6
  END AS type_label
7
FROM tCours
1
COURS TYPE_LABEL      
2
----- -----------------
3
    1 Cours             
4
    2 Travaux dirigés