Anda di halaman 1dari 37

4

Utiliser des fonctions de conversion


et des expressions conditionnelles

Copyright 2007, Oracle. Tous droits rservs.

Objectifs
A la fin de ce chapitre, vous pourrez :
dcrire les diffrents types de fonctions de conversion
disponibles en langage SQL
utiliser les fonctions de conversion TO_CHAR, TO_NUMBER
et TO_DATE
appliquer des expressions conditionnelles dans une
instruction SELECT

4-2

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre

Conversion implicite et explicite de type de donnes


Fonctions TO_CHAR, TO_DATE, TO_NUMBER
Fonctions d'imbrication
Fonctions gnrales :

NVL
NVL2
NULLIF
COALESCE

Expressions conditionnelles :
CASE
DECODE

4-3

Copyright 2007, Oracle. Tous droits rservs.

Fonctions de conversion

Conversion
de type de donnes

Conversion implicite
de type de donnes

4-4

Conversion explicite
de type de donnes

Copyright 2007, Oracle. Tous droits rservs.

Conversion implicite de types de donnes


Dans les expressions, le serveur Oracle peut convertir
automatiquement les types de donnes ci-aprs :

4-5

De

VARCHAR2 ou CHAR

NUMBER

VARCHAR2 ou CHAR

DATE

Copyright 2007, Oracle. Tous droits rservs.

Conversion implicite de types de donnes


Pour l'valuation des expressions, le serveur Oracle peut
convertir automatiquement les types de donnes suivants :

4-6

De

NUMBER

VARCHAR2 ou CHAR

DATE

VARCHAR2 ou CHAR

Copyright 2007, Oracle. Tous droits rservs.

Conversion explicite de types de donnes

TO_NUMBER

NUMBER

CHARACTER

TO_CHAR

4-7

TO_DATE

TO_CHAR

Copyright 2007, Oracle. Tous droits rservs.

DATE

Conversion explicite de types de donnes

TO_NUMBER

NUMBER

CHARACTER

TO_CHAR

4-8

TO_DATE

TO_CHAR

Copyright 2007, Oracle. Tous droits rservs.

DATE

Contenu du chapitre

Conversion implicite et explicite de type de donnes


Fonctions TO_CHAR, TO_DATE, TO_NUMBER
Fonctions d'imbrication
Fonctions gnrales :

NVL
NVL2
NULLIF
COALESCE

Expressions conditionnelles :
CASE
DECODE

4 - 10

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction TO_CHAR avec des dates


TO_CHAR(date, 'format_model')

Le modle de format :
doit tre indiqu entre apostrophes
distingue les majuscules des minuscules
peut inclure n'importe quel lment de format de date valide
comporte un lment fm permettant de supprimer les
espaces de complment ou les zros de dbut
est spar de la valeur de date par une virgule

4 - 11

Copyright 2007, Oracle. Tous droits rservs.

Elments du modle de format de date

4 - 12

Elment

Rsultat

YYYY

Anne complte en chiffres

YEAR

Anne en toutes lettres (en anglais)

MM

Mois sur deux chiffres

MONTH

Mois en toutes lettres

MON

Abrviation trois lettres du mois

DY

Abrviation trois lettres du jour de la semaine

DAY

Jour de la semaine en toutes lettres

DD

Jour du mois sous forme numrique

Copyright 2007, Oracle. Tous droits rservs.

Elments du modle de format de date


Les lments horaires formatent la partie heure de la date :
HH24:MI:SS AM

15:45:32 PM

Ajoutez des chanes de caractres en les incluant


entre guillemets :
DD "of" MONTH

12 of OCTOBER

Des suffixes peuvent tre ajouts aux nombres


en toutes lettres :
ddspth

4 - 14

fourteenth

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction TO_CHAR avec des dates

SELECT last_name,
TO_CHAR(hire_date, 'fmDD Month YYYY')
AS HIREDATE
FROM
employees;

4 - 16

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction TO_CHAR avec des nombres


TO_CHAR(number, 'format_model')

Voici quelques-uns des lments de format que vous pouvez


utiliser avec la fonction TO_CHAR pour afficher une valeur
numrique sous la forme d'une chane de caractres :

4 - 17

Elment

Rsultat

Reprsente un nombre

Force l'affichage d'un zro

Place un signe dollar flottant

Utilise le symbole flottant de la devise locale

Affiche un point comme sparateur dcimal

Affiche une virgule comme sparateur des milliers

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction TO_CHAR avec des nombres

SELECT TO_CHAR(salary, '$99,999.00') SALARY


FROM
employees
WHERE last_name = 'Ernst';

4 - 19

Copyright 2007, Oracle. Tous droits rservs.

Utiliser les fonctions TO_NUMBER et TO_DATE


Convertissez une chane de caractres en nombre l'aide de
la fonction TO_NUMBER :
TO_NUMBER(char[, 'format_model'])

Convertissez une chane de caractres en date l'aide


de la fonction TO_DATE :
TO_DATE(char[, 'format_model'])

Ces fonctions comportent un modificateur fx. Celui-ci


indique qu'il doit y avoir une correspondance exacte entre
l'argument de type caractre et le modle de format de date
d'une fonction TO_DATE.

4 - 20

Copyright 2007, Oracle. Tous droits rservs.

Utiliser les fonctions TO_CHAR et TO_DATE


avec le format de date RR
Pour trouver les employs embauchs avant 1990, utilisez le
format de date RR, qui produit les mmes rsultats que la
commande soit excute en 1999 ou maintenant :
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');

4 - 22

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre

Conversion implicite et explicite de type de donnes


Fonctions TO_CHAR, TO_DATE, TO_NUMBER
Fonctions d'imbrication
Fonctions gnrales :

NVL
NVL2
NULLIF
COALESCE

Expressions conditionnelles :
CASE
DECODE

4 - 23

Copyright 2007, Oracle. Tous droits rservs.

Fonctions d'imbrication
Les fonctions monolignes peuvent tre imbriques
n'importe quel niveau.
Les fonctions imbriques sont values du niveau le plus
profond au niveau le moins profond.

F3(F2(F1(col,arg1),arg2),arg3)
Etape1 = rsultat1
Etape2 = rsultat2
Etape3 = rsultat3

4 - 24

Copyright 2007, Oracle. Tous droits rservs.

Fonctions d'imbrication

SELECT last_name,
UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM
employees
WHERE department_id = 60;

4 - 25

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre

Conversion implicite et explicite de type de donnes


Fonctions TO_CHAR, TO_DATE, TO_NUMBER
Fonctions d'imbrication
Fonctions gnrales :

NVL
NVL2
NULLIF
COALESCE

Expressions conditionnelles :
CASE
DECODE

4 - 26

Copyright 2007, Oracle. Tous droits rservs.

Fonctions gnrales
Les fonctions suivantes, qui peuvent tre utilises avec
n'importe quel type de donnes, sont relatives l'utilisation
de valeurs NULL :
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)

4 - 27

Copyright 2007, Oracle. Tous droits rservs.

Fonction NVL
Convertit une valeur NULL en valeur relle :
Il est possible d'utiliser des donnes de type nombre,
caractre ou date.
Les types de donnes doivent correspondre :
NVL(commission_pct,0)
NVL(hire_date,'01-JAN-97')
NVL(job_id,'No Job Yet')

4 - 28

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction NVL


1

SELECT last_name, salary, NVL(commission_pct, 0),


(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;

4 - 29

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction NVL2

SELECT last_name, salary, commission_pct,


1
NVL2(commission_pct,
2
'SAL+COMM', 'SAL') income
FROM
employees WHERE department_id IN (50, 80);

1
4 - 30

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction NULLIF


1
SELECT first_name, LENGTH(first_name) "expr1",
2
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM
employees;

1
4 - 31

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction COALESCE


L'avantage de la fonction COALESCE par rapport la fonction
NVL rside dans le fait qu'elle peut accepter plusieurs valeurs
alternatives.
Si la valeur de la premire expression n'est pas NULL, la
fonction COALESCE renvoie cette valeur. Sinon, la fonction
examine successivement les valeurs des autres expressions
jusqu' ce qu'elle trouve une valeur non NULL.

4 - 32

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction COALESCE


SELECT last_name, employee_id,
COALESCE(TO_CHAR(commission_pct),TO_CHAR(manager_id),
'No commission and no manager')
FROM employees;

4 - 33

Copyright 2007, Oracle. Tous droits rservs.

Contenu du chapitre

Conversion implicite et explicite de type de donnes


Fonctions TO_CHAR, TO_DATE, TO_NUMBER
Fonctions d'imbrication
Fonctions gnrales :

NVL
NVL2
NULLIF
COALESCE

Expressions conditionnelles :
CASE
DECODE

4 - 35

Copyright 2007, Oracle. Tous droits rservs.

Expressions conditionnelles
Elles permettent d'implmenter la logique IF-THEN-ELSE
dans une instruction SQL.
Deux mthodes possibles :
Expression CASE
Fonction DECODE

4 - 36

Copyright 2007, Oracle. Tous droits rservs.

Expression CASE
Facilite les interrogations conditionnelles en faisant le travail
d'une instruction IF-THEN-ELSE :
CASE expr WHEN
[WHEN
WHEN
ELSE
END

4 - 37

comparison_expr1 THEN return_expr1


comparison_expr2 THEN return_expr2
comparison_exprn THEN return_exprn
else_expr]

Copyright 2007, Oracle. Tous droits rservs.

Utiliser l'expression CASE


Elle facilite les interrogations conditionnelles en faisant le travail
d'une instruction IF-THEN-ELSE :
SELECT last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP'
THEN 1.20*salary
ELSE
salary END
"REVISED_SALARY"
FROM
employees;

4 - 38

Copyright 2007, Oracle. Tous droits rservs.

Fonction DECODE
Facilite les interrogations conditionnelles en faisant le travail
d'une expression CASE ou d'une instruction IF-THEN-ELSE :
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])

4 - 39

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction DECODE

SELECT last_name, job_id, salary,


DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP',
1.20*salary,
salary)
REVISED_SALARY
FROM
employees;

4 - 40

Copyright 2007, Oracle. Tous droits rservs.

Utiliser la fonction DECODE


Affichez le taux d'imposition applicable pour chaque employ du
dpartement 80 :
SELECT last_name, salary,
DECODE (TRUNC(salary/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45) TAX_RATE
FROM
employees
WHERE department_id = 80;

4 - 41

Copyright 2007, Oracle. Tous droits rservs.

Synthse
Ce chapitre vous a permis d'apprendre :
modifier les formats de date pour l'affichage
l'aide de fonctions
convertir les types de donnes de colonnes
l'aide de fonctions
utiliser les fonctions NVL
utiliser la logique IF-THEN-ELSE et d'autres expressions
conditionnelles dans une instruction SELECT

4 - 42

Copyright 2007, Oracle. Tous droits rservs.

Prsentation de l'exercice 4
Dans cet exercice, vous allez :
crer des interrogations qui utilisent des fonctions TO_CHAR
et TO_DATE, et d'autres fonctions DATE
crer des interrogations qui utilisent des expressions
conditionnelles telles que DECODE et CASE

4 - 43

Copyright 2007, Oracle. Tous droits rservs.

Anda mungkin juga menyukai