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, page 9 à 12, pour avoir une description plus détaillée des fonctions disponibles sous Oracle.

RappelBD "Gestion des intervenants" : Schéma relationnel

CTRL+C pour copier, CTRL+V pour coller
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)
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)

ExempleBD "Gestion des intervenants" : Question avec CASE

CTRL+C pour copier, CTRL+V pour coller
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
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
CTRL+C pour copier, CTRL+V pour coller
1
COURS TYPE_LABEL      
2
----- -----------------
3
    1 Cours             
4
    2 Travaux dirigés   
COURS TYPE_LABEL      
----- -----------------
    1 Cours             
    2 Travaux dirigés