Sunteți pe pagina 1din 4

Funcții numerice

ABS (x) returnează valoarea absolută a lui x


Ex: SELECT ABS(13) FROM dual; //13
SELECT ABS(-13) FROM dual; //13

POWER (n,p) returnează np


Ex: SELECT POWER(3,4) FROM dual; //81

SQRT(n) extrage rădăcina pătrată din n


Ex: SELECT SQRT(625) FROM dual; //25

MOD(a,b) determină restul împărțirii lui a la b


Ex: SELECT MOD(37,16) FROM dual; //5

CEIL (a) returnează cel mai apropiat număr întreg mai mare sau egal cu a
Ex: SELECT CEIL(2.345) FROM dual; //3
SELECT CEIL(-2.345) FROM dual; //-2

FLOOR (a) returnează cel mai apropiat număr întreg mai mic sau egal cu a
Ex: SELECT FLOOR(2.345) FROM dual; //2
SELECT FLOOR(-2.345) FROM dual; //-3

ROUND (x,y) rotunjește valoarea lui x la numărul de cifre zecimale specificat de y


Ex: SELECT ROUND(2.34522,2) FROM dual; //2.35
SELECT ROUND(2.34522,3) FROM dual; //2.345
SELECT ROUND(2.34522,4) FROM dual;//2.3452

TRUNC (x,y) trunchiază valoarea lui x la numărul de cifre zecimale specificat de y


Ex: SELECT TRUNC(2.34522,2) FROM dual; //2.34
SELECT TRUNC(2.34522,0) FROM dual; //2
SELECT TRUNC(3456.34522,-1) FROM dual; //3450
SELECT TRUNC(3456.34522,-3) FROM dual;//3000

Funcții pentru șiruri de caractere

LENGTH(șir) returnează numărul de caractere din șir


Ex: SELECT LENGTH('nr de caractere') FROM dual; //15

LOWER(sir) transformă literele din șir în litere mici


Ex: SELECT LOWER('FUNCTII pentru SIRURI') FROM dual; //functii pentru siruri

UPPER(sir) transformă literele din șir în majuscule


Ex: SELECT UPPER('exemplu De sir') FROM dual; //EXEMPLU DE SIR

INITCAP(sir) transformă în majusculă fiecare primă literă a fiecărui cuvât


Ex: SELECT INITCAP('exemplu de sir') FROM dual; //Exemplu De Sir
SELECT INITCAP('al DOILEA exEMpLU') FROM dual; //Al Doilea Exemplu

CONCAT(sir1,sir2) concatenează două șiruri (primește doar două argumente)


Ex: SELECT CONCAT('Concatenare ','șiruri') FROM dual; //Concatenare șiruri

SUBSTR(sir,poz,nr) extrage din sir cel mult nr caractere incepând cu cel de pe poziția poz
Ex: SELECT SUBSTR('Perspicacitate',9,5) FROM dual; //citat
SELECT SUBSTR('Perspicacitate',9,6) FROM dual; //citate

INSTR(sir,subsir, poz, k) returnează poziția primei aparitii a lui subsir in sir pornind de la pozitia
poz cu k = a câta apariție a subșirului să fie căutată
Ex: SELECT INSTR('dependent de decizii','de',1,1) FROM dual; //1
SELECT INSTR('dependent de decizii','de',1,2) FROM dual; //6
SELECT INSTR('dependent de decizii','de',1,3) FROM dual; //11
SELECT INSTR('dependent de decizii','de',1,4) FROM dual; //14
SELECT INSTR('dependent de decizii','de',1,5) FROM dual; //0
SELECT INSTR('dependent de decizii','de',2,1) FROM dual; //6

LPAD(șir1,n,șir2) completează șir1 la stânga cu șir2 până se obține n caractere


Ex: SELECT LPAD('Header',10,'*') FROM dual; //****Header
SELECT LPAD('Header',10,'ANTETUL') FROM dual; //ANTEHeader

RPAD(șir1,n,șir2) completează șir1 la dreapta cu șir2 până se obține n caractere


Ex: SELECT RPAD('Header',10,'*') FROM dual; //Header****
SELECT RPAD('Header',10,'ANTETUL') FROM dual; //HeaderANTE

LTRIM(șir,c) șterge caracterul c din stânga lui șir


Ex: SELECT LTRIM('apasa','a') FROM dual; //pasa
SELECT LTRIM('aaaah','a') FROM dual; //h

RTRIM(șir,c) șterge caracterul c din dreapta lui șir


Ex: SELECT RTRIM('apasa','a') FROM dual; //apas
SELECT RTRIM('răspuns daaaa','a') FROM dual; //răspuns d

TRIM(șir) elimină spațiile multiple din șir


Ex: SELECT TRIM(' eliminare spații multiple ') FROM dual; //eliminare spații multiple

REPLACE(s,s1,s2) înlocuiește toate aparițiile lui s1 din s cu s2


Ex: SELECT REPLACE('lucrări ','ă','a') from dual; //lucrari

TRANSLATE (s,s1,s2) înlocuiește în șirul s, primul caracter din s1 cu primul caracter din s2, al
doilea caracter din s1 cu al doilea caracter din s2 ș.a.m.d.
Ex: SELECT TRANSLATE('Teleenciclopedia','enp','ENX') from dual; // TElEENcicloXEdia
SELECT TRANSLATE('Teleenciclopedia','enp','EEE') from dual; // TElEEEcicloEEdia
SELECT TRANSLATE('Media 3.45','12345678','23456789') from dual; //Media 4.56

Temă de laborator:
I. Ce fac următoarele comenzi ?
a) SELECT ABS(MOD(13,5)-7*3) AS "Rezultat expresie" FROM dual;
b) SELECT ABS(MOD(13,5)-7*3)||' mere' AS "Rezultat expresie" FROM dual;
c) SELECT POWER(2,0) AS "Rezultat expresie" FROM dual;
d) SELECT POWER(SQRT(25),2) AS "Rezultat expresie" FROM dual;
e) SELECT CEIL(-34.234) AS Rezultat FROM dual;
f) SELECT CEIL(34.234) AS Rezultat FROM dual;
g) SELECT FLOOR(-34.234) AS Rezultat FROM dual;
h) SELECT FLOOR(34.234) AS Rezultat FROM dual;
i) SELECT TRUNC(1/12,2) AS "Rezultat" FROM dual;
j) SELECT TRUNC(1.234567,3) AS "Rezultat" FROM dual;
k) SELECT ROUND(1.234567,3) AS "Rezultat" FROM dual;
l) SELECT ROUND(1.234567) AS "Rezultat" FROM dual;
m) SELECT ROUND(1.234567,-1) AS "Rezultat" FROM dual;
n) SELECT ROUND(17.234567,-1) AS "Rezultat" FROM dual;
o) SELECT TRUNC(17.234567,-1) AS "Rezultat" FROM dual;

Funcții pentru date calendaristice

SYSDATE – returnează data sistemului


Ex: SELECT SYSDATE FROM dual;

SYSDATE +n – returnează data care va fi peste n zile după sistemului


Ex: SELECT SYSDATE + 5 FROM dual;

MONTHS_BETWEEN (data1,data2) – returnează numărul de luni dintre data2 și data1


Ex: SELECT MONTHS_BETWEEN(SYSDATE,'01-01-2019') FROM dual;

ADD_MONTHS (data,n) – returnează data care va fi peste n luni după data specificată
Ex: SELECT ADD_MONTHS(SYSDATE,12) FROM dual;

NEXT_DAY(data, zi_a_săptămânii) – returnează următoarea dată de după data când va cădea


ziua săptămânii specificată
Ex: SELECT NEXT_DAY(SYSDATE, 'Friday') FROM dual;

LAST_DAY (data) – returnează ultima zi a lunii corespunzătoare pentru data


Ex: SELECT LAST_DAY(SYSDATE) FROM dual;
Ex: SELECT LAST_DAY(TO_DATE('22-10-2019','DD-MM-YYYY')) FROM dual;
Ex: SELECT LAST_DAY('10-22-2019') FROM dual;

ROUND(data,nivel) – rotunjește prin adaos o dată la nivel-ul specificat


Ex1 – rotunjește la zi data curentă: SELECT ROUND(SYSDATE,'DD') FROM dual;
Ex2 – rotunjește la lună data curentă: SELECT ROUND(SYSDATE,'Month') FROM dual;
Ex3 – rotunjește la nivel de an data curentă: SELECT ROUND(SYSDATE+1,'YEAR') FROM dual;

TRUNC(data,nivel) – trunchiază o dată la nivel-ul specificat


Ex1: SELECT TRUNC(SYSDATE,'DD') FROM dual;
Ex2: SELECT TRUNC(SYSDATE,'Month') FROM dual;
Ex3: SELECT TRUNC(SYSDATE+1,'YEAR') FROM dual;

II. Ce fac următoarele comenzi ?


a) CREATE TABLE angajati_bk AS SELECT * FROM angajati;
b) SELECT LPAD(' Casa',50,' $') FROM dual;
c) SELECT LENGTH('Casa') AS "Lungime sir" FROM dual;
d) SELECT CONCAT (CONCAT (CONCAT (CONCAT('Functii',' '),'pentru'),' '),'siruri') AS Sirul
FROM dual;
e) SELECT 'Functii' || ' '||'pentru'||' ' ||'siruri' FROM dual;
f) SELECT LENGTH('Functii' ||'siruri') AS "Nr caractere" FROM dual;
g) SELECT INITCAP(LOWER('BAZE')||' de '||UPPER('date')) FROM dual;
h) SELECT LPAD('A',10,'$')||RPAD('B',10,'Lei') FROM dual;
i) SELECT LENGTH(LPAD('A',10,'$')||RPAD('B',10,'Lei')) FROM dual;
j) SELECT CURRENT_DATE FROM dual;
k) SELECT TO_CHAR(SYSDATE, 'DD-Mon-YYYY HH24:MI:SS') "Acum este" FROM DUAL;
l) SELECT TO_CHAR(SYSDATE, 'Day DD-Month-YYYY HH24:MI:SS') "Acum este" FROM
DUAL;

III. Rezolvați următoarele cerințe:


a)Inserați în tabelul ANGAJAȚI coloana idd (id departament)
ALTER TABLE angajati ADD idd NUMBER(2);

b)Completați pentru fiecare angajat idd cu valori de la 1 la 4.


UPDATE angajati SET idd=MOD(ida,4)+1;

c)Creați apoi tabelul DEPARTAMENTE format din câmpurile


-idd NUMBER(2);
-denumire VARCHAR2(30);
-locație VARCHAR2(30);

d)Inserați în tabel datele a 4 departamente a.î. idd să conțină valorile 1, 2, 3 și 4.

e) Creați o interogare care afișează numele fiecărui angajat și departamentul în care lucrează.
Indicație: vor fi selectate câmpuri din ambele tabele pentru care există același idd
SELECT …………. FROM angajati a, departamente d WHERE a.idd=d.idd;
f) Creați o interogare care afișează doar persoanele care lucrează în departamentul 1.

Temă de laborator:
I.Creați (scrieți comanda pentru a crea) tabelul HOTELURI format din următoarele câmpuri:
-codh
-denumire
-categorie
-adresa
-nr camere s
-nr camere d
-pret cams
-pret camd
-facilitati
-obs
Scrieți comenzile pentru a insera 7 înregistrări.

II.Scrieți interogările pentru a afișa:


a) Numărul total de camere din fiecare hotel
b) Prețul mediu pe camera single
c) Hotelurile care pe coloana categorie conțin ***
d) Hotelurile care nu au completată rubrica obs
e) Hotelurile care conțin în coloana facilitati textul wi-fi
f) Hotelurile a căror denumire nu conține litera U
g) Toate datele din tabel ordonate descendent după pretul camerei duble
h) Toate datele din tabel pentru care prețul camerei single >= prețul mediu al camerei single
i) Hotelurile care au prețul maxim al camerei duble
j) Numărul de hoteluri care conțin TV ca facilitate
k) Denumirea fiecărui hotel urmat de prețul/camera single în lei și apoi prețul/camera double
în lei

S-ar putea să vă placă și