Alte funcţii SQL Server – Sintaxa şi Exemple 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
Alte funcţii SQL Server – Sintaxa şi Exemple 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:
Alte funcţii SQL Server – Sintaxa şi Exemple 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:
Alte funcţii SQL Server – Sintaxa şi Exemple 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:
Alte funcţii SQL Server – Sintaxa şi Exemple 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.
Alte funcţii SQL Server – Sintaxa şi Exemple 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 de caractere>
<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.
Alte funcţii SQL Server – Sintaxa şi Exemple 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]%'