Sunteți pe pagina 1din 7

Funcţii SQL Server – Sintaxa şi Exemple

www.cartiaz.ro – Carti si articole online gratuite de la A la Z 1

Funcţii utilizate pentru rotunjiri:

CEILING, FLOOR si ROUND

Exemplu:
SELECT CEILING (23.1) AS EX1, CEILING(23.8) AS EX2,
FLOOR(23.1) AS EX3, FLOOR(23.8) AS EX4,
ROUND(23.1,0) AS EX5, ROUND(23.8,0) AS EX5

Alte funcţii matematice:


POWER ( expresie
numerică , exponent )

(RIDICAREA LA PUTERE)

Exemplu:

SELECT POWER(2,3) as [ 2 LA PUTEREA 3]

ABS (expresie numerica)

Functia ABS returnează valoarea absoluta a unei expresii numerice.


Exemplu:
SELECT ABS (123) AS [Ex1], ABS(-23) AS [Ex2]

SIGN (expresie numerică)


Returnează una dintre valorile:
-1 dacă expresia este negativă
0 dacă expresia este zero
+1 dacă expresia este pozitivă
Exemplu:
SELECT SIGN(-10) AS EX1, SIGN(0) AS EX2 , SIGN(100) AS EX3
Funcţii SQL Server – Sintaxa şi Exemple
www.cartiaz.ro – Carti si articole online gratuite de la A la Z 2

Funcţii de tip agregat

Funcţiile de tip agregat pot fi utilizate in cadrul unor expresii în:

• Instrucţiunii SELECT
• Clauzei COMPUTE
• Clauzei HAVING
Observaţii:
1. Dacă sunt utilizate în cadrul instrucţiunii SELECT, celelalte câmpuri din lista
instrucţiunii SELECT se vor regăsi drept câmpuri de grupare în cadrul instrucţiunii
GROUP BY.
2. Clauza HAVING permite specificarea de condiţii la nivelul grupurilor de înregistrări
3. Instrucţiunea COMPUTE permite calcularea de totaluri generale sau subtotaluri şi este
specificată la sfârşitul instricţiunii de selecţie (după ORDER BY).

AVG ( [ DISTINCT ] expression )


COUNT ([ DISTINCT ] expression | * } )
SUM ( [DISTINCT ] expression )
MAX (expression )
MIN (expression )

Specificarea opţiunii DISTINCT în cazul funcţiilor AVG, SUM sau COUNT permite ca
valorile identice să fie considerate o singură dată în momentul efectuării calculelor.
Specificarea simbolului * între parantezele funcţiei COUNT va conduce la numărarea
tuturor valorilor domeniului pe care se aplică funcţia, inclusiv a valorilor nule.
Exemple:
Se dă tabelul:

1. Calculati câte coduri de departamente sunt in tabelul Angajati:


Funcţii SQL Server – Sintaxa şi Exemple
www.cartiaz.ro – Carti si articole online gratuite de la A la Z 3
SELECT COUNT(CODDEPARTAMENT) As EX1,
COUNT(DISTINCT CodDepartament) AS Ex2,
COUNT(*) AS Ex3
FROM ANGAJATI

*Observaţii:
Clauza Group By nu este necesară întrucât funcţia Count se aplică întregului domeniu,
iar în instrucţia SELECT nu figurează şi alte câmpuri inafara funcţiilor.
Cele trei funcţii Count returnează rezultate diferite deoarece al doilea exemplu utilizează
opţiunea Distinct iar al 3-lea va număra şi valoarea Null prezentă la unul dintre
anngajaţi pe câmpul CodDepartament.

2. Calculaţi salariul minim si salariul maxim pe fiecare compartment unde sunt mai
mult de doi angajati.

SELECT CodDepartament, MIN(salariu) as SalariuMinim, MAX(salariu) as


SalariuMaxim
FROM ANGAJATI
GROUP BY CodDepartament
HAVING COUNT(CNP) > 2

Se va observa utilizarea clauzei HAVING care acţionează la nivelul grupurilor de


înregistări.

3. Lista alfabetica a salariatilor din departamentul IT si total general salarii.


Intrucât se doreşte utilizarea unei funcţii de grupare îmreună cu o listă de selecţie ce
conţine înregistrări negrupate se va utiliza clauza COMPUTE
SELECT NUME, SALARIU
FROM ANGAJATI
WHERE CodDepartament='IT'
ORDER BY NUME
COMPUTE SUM(SALARIU)

Rezultatul este prezentat în figura următoare:


Funcţii SQL Server – Sintaxa şi Exemple
www.cartiaz.ro – Carti si articole online gratuite de la A la Z 4

Observaţie:Clauza COMPUTE se plasează întotdeauna la sfărşitul instrucţiunii de


selecţie .

4. Lista salariatilor ordonată alfabetic, pe departamente şi salariul mediu pe fiecare


departament:

SELECT NUME, SALARIU, CodDepartament


FROM ANGAJATI
ORDER BY CodDepartament, NUME
COMPUTE AVG(SALARIU) BY CodDepartament

Observaţie În acest caz, clauza COMPUTE permite specificarea câmpului pe baza


cărora se vor realiza subtotaluri utilizând sintaxa
COMPUTE <funcţie> BY nume_camp

Important! Utilizarea clauzei COMPUTE … BY necesită ca


rezultatele selecţiei să fie ordonate după câmpul precizat
în instrucţiunea BY (în cazul de faţă CodDepartament)

Rezultatele exemplului precedent sunt prezentate în figura următoare:


Funcţii SQL Server – Sintaxa şi Exemple
www.cartiaz.ro – Carti si articole online gratuite de la A la Z 5

Funcţii de clasificare
ROW_NUMBER ( ) OVER (< order_by_clause > )

Atribuie un număr de ordine fiecărei inregistrari in funcţie de un criteriu de ordonare


specificat în clauza OVER.

RANK ( ) OVER (< order_by_clause > )

Atribuie un rang fiecărei inregistrari in funcţie de un criteriu de ordonare. Inregistrarile cu


aceleaşi valori pe câmpul după care se face ordonarea vor avea acelaşi rang.

NTILE (N) OVER (order_by_clause > )

Permite distribuirea înregistrărilor dintr-un set de rezultate pe N intervale funcţie de un


criteriu de ordonnare.

EXEMPLE

1. Sa es enumeroteze salariaţii în ordine descrescătoare a salariilor.


2. Utilizând funcţia RANK să se atribuie un rang angajaţilor după salariu.
3. Să se împartă angajaţii în trei grupe salariale, în ordine descrescătoare a
salariilor.

SELECT Nume, Salariu,


ROW_NUMBER() OVER (ORDER BY SALARIU DESC) AS Ex1,
RANK() OVER (ORDER BY SALARIU DESC) AS Ex2,
NTILE(3) OVER (ORDER BY SALARIU DESC) AS Ex3
FROM ANGAJATI

ORDER BY SALARIU DESC

Observatie: Clauza ORDER BY a instrucţiunii SELECT poate sa difere de cea din clauza
OVER utilizată în cadrul funcţiilor ROW_NUMBER, RANK sau NTILE.
Funcţii SQL Server – Sintaxa şi Exemple
www.cartiaz.ro – Carti si articole online gratuite de la A la Z 6
Alte funcţii

ISNULL ( expresie , valoare de inlocuit )

Funcţia ISNULL evaluează dacă o expresie conţine valoarea NULL şi, în cazul în care
condiţia este îndeplinită, înlocuieşte expresia cu valoarea specificată ca al doilea
argument .
ISDATE (expresie )

Funcţia ISDATE evaluează dacă o expresie poate fi evaluată ca o dată calendaristică


validă. În cazul în care condiţia este îndeplinită returneză valoarea 1, în caz contrar 0.
ISNUMERIC(expresie)

Funcţia ISNUMERIC evaluează dacă o expresie poate fi evaluată ca valoare numerică. În


cazul în care condiţia este îndeplinită returneză valoarea 1, în caz contrar 0.

Cautarea în cadrul şirurilor de caractere pe baza şabloanelor definite


prin operatorul de comparare LIKE

Pe lângă funcţiile ce permit manipularea şirurilor de caractere despre care am discutat în


cursul precedent (LEFT, RIGHT, SUBSTRING), SQL Server permite căutarea în cadrul
şirurilor de caractere pe baza unor şabloane specifice operatorului LIKE.

Sintaxa: <expresie> [NOT] LIKE <sir decaractere>

<expresie> poate fi un nume de câmp dintr-un tabel sau View sau orice altă
expresie SQL validă ce poate fi evaluată drept şir de caractere
<sir de caractere> reprezintă şirul sau modelul de şir de caractere ce urmează a
fi regăsit în cadrul expresiei pe care se efectuează căutarea

Pentru a crea modele de şiruri de caractere in vederea efectuării de căutări se


pot utiliza următoarele caractere speciale:
% tine locul unui şir de 0 sau mai multe caractere
_ tine locul unui caracter
[ ] orice caracter din enumerarea sau intervalul cuprins intre paranteze
[^ ] - orice caracter inafara de cele din numerarea sau intervalul specificat
dupa simbolul ^ intre paranteze.
Funcţii SQL Server – Sintaxa şi Exemple
www.cartiaz.ro – Carti si articole online gratuite de la A la Z 7

Exemple:
Exemplele următoare se bazează pe căutarea unor şabloane în cadrul câmpului
cod numeric personal (CNP)

1. Selectati angajatii de sex masculin nascuti in luna noiembrie (11) a


caror nume incep cu litera I.

SELECT CNP, NUME FROM ANGAJATI


WHERE NUME LIKE 'I%' And cnp like '[13]__11%'

2. Selectati angajatii nascuti intre amii 1971 - 1979 in lunile


februarie(2), iunie(6) sau august(8)

SELECT CNP, NUME FROM ANGAJATI


WHERE CNP LIKE '_7[1-9]0[268]%'

3. Selectati toti angajatii nascuti in anii ’80, fără cei nascuti in


84,85 si 87.

SELECT CNP, NUME FROM ANGAJATI


WHERE CNP LIKE '_8[^457]%'