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: numerică , exponent ) (RIDICAREA LA PUTERE) Exemplu: POWER ( expresie

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 SELECT COUNT(CODDEPARTAMENT) As EX1, COUNT(DISTINCT CodDepartament) AS Ex2, COUNT(*) AS Ex3 FROM ANGAJATI

3

*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]%'