Aceste funcții fac converia de la un tip de date la un alt tip de date:
Funcție | Descriere funcție |
---|---|
TO_CHAR(expr[,format[,’nlsparams’]]) | face conversia lui expr (care poate avea tipul fie numeric, fie dată) la VARCHAR2 |
TO_DATE(expr[,format[,’nlsparams’]]) | face conversia lui expr (cu tipul CHAR sau VARCHAR2) în formatul DATE |
TO_NUMBER(expr [,format[,’nlsparams’]]) | face conversia lui expr la o valoare de tip NUMBER |
Parametrul format specifică formatul în care se va face afișarea, dacă lipsește se ia formatul implicit. Pentru TO_NUMBER specifică formatul în care este dat expr. Parametrul ‘nlsparam’ este utilizat pentru a seta parametrii de sistem să evalueze expresia în diferite limbi, formate, etc.
Ex 1. Să se selecteze toți angajații care au venit în firmă în 1982.
Formatul pentru numere (se pot folosi toate cu comanda COLUMN):
Format | Seminificație |
---|---|
9 | Numere (nr. de 9 determină lungimea de afișare) |
0 | Afișează 0 de la început |
$ | Semnul $ |
. | Punct decimal |
, | Virgulă |
MI | Semnul minus la dreapta |
PR | Paranteze pentru numere negative |
EEEE | Notație științifică |
V | Înmulțire cu 10 (nr. de 9 de după V specifică de câte ori se face înmulțirea) |
B | Afișează valori 0 ca blancuri |
D | Specifică câte zerouri să fie înainte și după delimitatorul decimal |
GREATEST(exp1[,expr2[,…]]) | returnează cel mai mare elemet din listă |
LEAST(exp1[,expr2[,…]]) | returnează cel mai mic element din listă |
Această funcție are efectul unei unei structuri case sau if-then-else.
Ex 2. Să se caluleze o primă pentru angajații din departamentul 20 în funcție de jobul angajatului.
Ex 3. Să se calculeze o primă în funcție de vechime pentru angajații din departamentul 20.
Expresiile CASE pot fi folosite în clauza SELECT sau WHERE. Ele returnează o valoare (a nu se confunda cu instrucțiunea CASE):
Sintaxa 1:
CASE expr WHEN value1 THEN retval_1 WHEN value2 THEN retval_2 ... [ELSE retval_k] END
Sintaxa 2:
CASE WHEN expr_1 THEN retval_1 WHEN expr_2 THEN retval_2 ... [ELSE retval_k] END
Pentru a afla userul curent se folosește funcția user:
SELECT USER FROM dual;
Aceste funcții returnează rezultate pe grupuri de înregistrări, nu pe o singură înregistrare, cum au fost cele prezentate până acum. Gruparea se face folosind clauza GROUP BY într-o comandă SELECT și în acest caz toate elementele listei, cu exceptia funcțiilor de grupare, trebuie cuprinse în clauza de grupare. Pentru a se pune condiții folosind funcțiile de grup acestea trebuie să apară în clauza HAVING, nu în clauza WHERE. Se poate folosi operatorul DISTINCT pentru a selecta doar elemente distincte din listă, dar se poate folosi și operatorul ALL pentru a selecta și duplicatele. Funcțiile de grup se mai numesc și funcții de agregare (SQL Aggregate Functions).
Ex 4. Afișați media salariilor pentru toate valorile din tabel, iar apoi doar pentru salariile distincte. Rezultatul este diferit deoarece există salarii duplicate.
Ex 5. Să se calculeze salariul mediu pentru fiecare departament.
Ex 6. Să se calculeze venitul lunar mediu pentru fiecare departament. Afișati id_dep și venitul lunar doar pentru departamentele care au venitul lunar mediu mai mare de 2000. Pentru a aplica o condiție bazată pe funcții de agregare, folosim HAVING în loc de WHERE.
Ex 7. Să se afișeze numărul angajatilor care au primit salariu pentru fiecare departament.
Ex 8. Să se afișeze departamentele care au cel puțin două funcții distincte pentru angajați.
Ex 9. Să se afișeze salariul minim, maxim și suma slariilor pentru fiecare departament.
Ex 10. Să se afișeze varianția standard și deviația standard a salariilor pentru fiecare departament.
Ex 1. Să se facă o listă cu:
Ex 2. Să se facă o listă cu:
Prima se acorda doar pentru angajații care au gradul salarial 2 sau 4 și au venit în firmă în același an cu șeful lor
unde n este vechimea în firmă calculată în luni și c este o valoare introdusă de la tastatură (folosiți 0.15 pentru testare).
Ordonați rezultatele crescător dupa numele angajatului.