Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
Functii de un singur rind



Functii de un singur rind






















Scopul Lectiei




Functiile fac blocul de baza al interogarii mai puternic si sint folosite pentru a manipula date. Aceasta lectie este prima dintr un set de doua lucrari ce au ca obiectiv descrierea acestor functii. Ea se ocupa atit de functiile de un singur rind pentru caractere, numere si date calendaristice cit si de functiile ce fac conversii dintr-un tip de data in altul de exemplu: din caracter in numar





Functii SQL


Functiile reprezinta o componenta importanta a limbajului SQL, si pot fi utilizate pentru a face urmatoarele

Calcule matematice asupra datelor

Modificarea unor articole individuale

Manipularea iesirii pentru grupuri de rinduri

Stabilirea unui format pentru date calendaristice si numere atunci cind  acestea sint tiparite pe ecran

Schimbarea tipului de data a unei coloane


Functiile SQL accepta argumente si intorc valori.


Nota : Majoritatea functiilor descrise in aceasta lectie sint specifice versiunii SQL pentru Oracle.



















Functii SQL continuare


Exista doua tipuri distincte de functii:

Functii de un singur rind

Functii de mai multe rinduri


Functii de un singur rind


Aceste functii actioneaza doar asupra unui singur rind si intorc un rezultat pentru fiecarea rind. Exista mai multe tipuri de functii de un singur rind. Aceasta lectie se ocupa de urmatoarele tipuri

Caracter

Numar

Data calendaristica

Conversie



Functii de mai multe rinduri


Aceste functii actioneaza asupra unor grupuri de rinduri si intorc un rezultat pentru fiecare grup.


Pentru mai multe detalii consultati lucarea

Oracle Server SQL Reference. Release 8.0 pentru o lista completa a functiilor disponibile impreuna cu sintaxa aferenta


Functii de un singur rind


Functiile de un singur rind sint utilizate pentru a manipula date. Ele accepta unul sau mai multe argumente si intorc o singura valoare pentru fiecare rind rezultat din interogare. O functie poate avea ca argument unul din urmatoarele

O constanta furnizata de utilizator

O variabila

O denumire de coloana

O expresie


Caracteristici ale functiilor de un singur rind


Actioneaza asupra fiecarui rind intors de interogare

Intorc o valoare pentru fiecare rind

Pot intoarce o data a carui tip este diferit de tipul argumentului

Este posibil sa astepte unul sau mai multe argumente

Le puteti utiliza in SELECT, WHERE si ORDER BY Le puteti imbrica


In sintaxa:


nume_functie             este numele functiei

coloana                       este un nume de coloana din baza de date

expresie                      este orice sir de caractere sau expresie calculabila

arg1, arg2, .     sint argumentele utilizate de functie
















Functii de un singur rind (continuare


Aceasta lectie prezinta urmatoarele tipuri de functii

Functii pentru caractere: accepta argumente de tip caracter si intorc rezultate de tip caracter sau numeric

Functii pentru numere: accepta argumente de tip numeric si intorc rezultate de tip numeric

Functii pentru date calendaristice accepta argumente de tip data calendaristica si intorc rezultate de tip data calendaristica cu exceptia functiei MONTH_BEETWEEN care intoarce o valoare numerica

Functii pentru conversie: fac conversia dintr-un tip de data in altul

Functii generale

Functii NVL

Functii DECODE






















Functii pentru caractere


Functiile de un singur rind  pentru caractere accepta argumente de tip caracter si intorc rezultate de tip caracter sau numeric. Functiile pentru caractere se pot imparti in

Functii de conversie a caracterelor din litere mari in litere mici.

Functii de manipulare a caracterelor


Functie

Scop

LOWER (expresie coloana

Face conversia caracterelor alfabetice in litere mici

UPPER (expresie coloana

Face conversia caracterelor alfabetice in litere mari

INITCAP (expresie coloana

Face conversia pentru primul caracter din fiecare cuvint in litera mare iar pentru restul caracterelor conversia se face in litere mici

CONCAT(expresie coloana1,

(expresie coloana2

Concateneaza prima valoare de tip caracter cu a doua valoare de tip caracter.

Aceasta functie este echivalenta cu operatorul de concatenare

SUBSTR(expresie coloana,

m/,n/)

Intoarce un sir de caractere din cadrul valorii de tip caracter incepind cu pozitia m si avind lungimea n. Daca m este negativ atunci pozitia de inceput a numararii se considera a fi ultimul caracter din sir. Daca n este omis atunci functia intoarce toate caracterele de la pozitia m pina la sfirsitul sirului.

LENGTH(expresie coloana

Intoarce numarul de caractere dintr-o valoare de tip caracter

INSTR(expresie coloana,m

Intoarce pozitia in cadrul valorii de tip caracter a caracterului specificat.

LPAD(expresie|coloana,       

n,’sir caractere

Aliniaza valoarea de tip caracter la dreapta pe o lungime de n caractere.


Nota Aceasta este o lista incompleta a functiilor disponibile.

Pentru mai multe detalii consultati lucarea

Oracle Server SQL Reference. Release 8.0 “Character Function”














Functii de conversie a caracterelor din litere mari in litere mici.


Cele trei functii de conversie a caracterelor sint: LOWER, UPPER, INITCAP.

LOWER:  Face conversia in litere mici  pentru un text scris cu litere mari si mici

UPPER : Face conversia in litere mari pentru un text scris cu litere mari si mici

INITCAP : Face concersia pentru prima litera din fiecare cuvint in litera mare iar pentru celelalte litere ale cuvintului conversia se face in litera mica.

SQL > SELECT ‘The job title for ‘ || INITCAP(ename) || ‘is’ || LOWER(job)

2 AS “EMPLOYEE DETAILS”

3 FROM emp;

 





EMPLOYEE DETAILS

-------- ----- ------ -------- ----- ------ -----

The job for King is manager

The job for Blake is manager

The job for Clark is manager

.

14 rows selected.

 





































Functii de conversie a caracterelor din litere mari in litere mici.


Exemplul de mai sus afiseaza numarul de ordine, numele si departamentul la care lucreaza pentru angajatul BLAKE.


Clauza WHERE din prima instructiune SQL specifica numele angajatului ca fiind blake. Din moment ce toate informatiile din  tabela EMP sint memorate folosind litere mari numele ‘blake’ (scris cu litere mici) nu poate fi gasit si ca urmare nu se afiseaza nimic


Clauza WHERE din cea de a doua instructiune SQL face mai intii conversia numelui memorat in tabela din litere mari in litere mici si compara rezultatul obtinut cu numele ‘blake’. In acest caz ambii termeni din comparatie sint scrisi cu litere mici si deci de aceasta data se pot selecta informatiile necesare din tabela. Clauza WHERE mai poate fi scrisa ca in exemplul de mai jos , efectul instructiunii fiind acelasi.

. WHERE ename = ‘BLAKE’

 





Numele angajatului din partea dreapta a comparatiei este scris cu litere mari adica asa cum apare in tabela. Pentru a afisa numele cu prima litera convertita in litera mare iar restul in litere mici utilizati functia INITCAP.


SQL> SELECT empno, INITCAP(ename), deptno

2 FROM emp

3 WHERE LOWER(ename) = 'blake';


 



















Functii pentru manipulat caractere


Cele cinci functii pentru manipulat caracatere prezentate in cadrul acestei lectii sint: CONCAT, SUBSTR, LENGTH, INSTR si LPAD.

CONCAT: Concateneaza cei doi parametri. Functia limiteaza numarul parametrilor la 2.

SUBSTR:  Extrage un sir de caracter de o lungime spcificata.

LENGTH Intoarce lungimea sirului de caractere (intoarce o valoare numerica

INSTR: Gaseste pozitia caracterului specificat.

LPAD Intoarce un sir de caractere rezultat prin inserarea arg. trei la stinga primului argument lungimea rezultatului avind lungimea specificata de cel de al doilea parametru.


Nota RPAD are un comportament similar cu functia LPAD numai ca inserarea arg. trei se la dreapta primului argument.






















Functii pentru manipulat caractere (continuare)


Exemplul de mai sus afiseaza numele angajatului si slujba sa impreuna, lunginea numelui si pozitia literei A in cadrul numelui, pentru toate persoanele care au functia de vinzator.


Exemplu


Modificati exemplul de mai sus astfel incit instructiunea SQL sa afiseze informatiile despre angajati pentru acele persoane a caror nume se termina in litera N.


SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename),

2 INSTR(ename, 'A')

3 FROM emp

4 WHERE SUBSTR(job,-1,1) = 'N';


 







ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A')

---------- ----- ----- --------- ------------- ----- ----- ------

MARTIN MARTINSALESMAN 6 2

ALLEN ALLENSALESMAN 5 1


 

















Functii pentru valori numerice



Functiile pentru valori numerice accepta valori numerice si intorc valori numerice. Aceasta sectiune descrie o parte din aceste functii


Funtie

Scop

ROUND (coloana | expresie, n)

Rotunjeste coloana, expresia sau valoarea la un numar cu n pozitii la partea zecimala. Daca n este omis numarul rezultat din conversie nu are parte zecimala. Daca n este negativ este rotunjit numarul din partea stinga a punctului zecimal.

TRUNC (coloana | expresie, n)

Truncheaza coloana, expresia sau valoarea la un numar cu n pozitii la partea zecimala. Daca n este omis numarul rezultat din conversie nu are parte zecimala. Daca n este negativ este truncheat numarul din partea stinga a punctului zecimal catre zero

MOD (m,n)

Intoarce restul impartirii dintre m si n


Nota Aceasta este o lista incompleta a functiilor disponibile.

Pentru mai multe detalii consultati lucarea

Oracle Server SQL Reference. Release 8.0 “Number Function”














Functia ROUND


Functia ROUND rotunjeste coloana, expresia sau valoarea la un numar cu n pozitii la partea zecimala. Daca al doilea argument este omis sau este 0 numarul rezultat din conversie nu are parte zecimala. Daca al doilea argument este 2 atunci numarul rezultat din conversie are 2 cifre la partea zecimala. Daca al doilea argument este 2 atunci se rotunjesc primele 2 cifre ale numarului de la stinga punctului zecimal

Functia ROUND poate fi utilizata asupra datelor calendaristice.

Veti vedea exemple mai tirziu in cadrul acestei lectii.

NOTA DUAL este o tabela fictiva. Mai multe detali despre acest aspect vor fi oferite mai tirziu.
















Functia TRUNC


Truncheaza coloana, expresia sau valoarea la un numar cu n pozitii la partea zecimala.

Functia TRUNC functioneaza cu argumente similare ca si functia ROUND. Daca al doilea argument este omis sau este 0 numarul rezultat din conversie nu are parte zecimala. Daca al doilea argument este 2 atunci numarul rezultat din conversie are 2 cifre la partea zecimala.

Functia TRUNC la fel ca si functia ROUND poate fi utilizata asupra datelor calendaristice.

















Functia MOD


Functia MOD intoarce restul impartirii dintre valoarea1 si valoarea2. Exemplul de mai sus calculeaza restul impartirii dintre salar si comisionpentru toti angajatii care sint agenti comerciali

















Formatul datei calendaristice in Oracle


Oracle memoreaza datele calendaristice intr un format numeric intern Secol, an, luna, zi, ora, minute, secunde.

Formatul implicit pentru date calendaristice este: DD-MON-YY. Valorile valide pentru date calendaristice se situeaza intre Ianuarie 1. 4712 B.C. si Decembrie 31. 9999 A.D.


SYSDATE

SYSDATE este o functie care intorce data si timpul curent. Puteti sa utilizati SYSDATE asa cum utilizati orice denumire de coloana. De exemplu puteti afisa data curenta selectind SYSDATE dintr o tabela. Tabela pe care o folositi ramine la latitudinea dumneavoastra. Se poate de exemplu folosi pentru afisarea datei tabela fictiva DUAL.


DUAL

Tabela DUAL este proprietatea utilizatorului SYS si poate fi accesata de toti utilizatorii. Ea contine o coloana DUMMY, si un rind cu valoarea X. Tabela DUAL este folositoare atunci cind avem de intors o singura valoare

ca de exemplu valoare unei constante, pseudocoloane sau o expresie care nu este derivata dintr-o tabela cu datele utilizatorului.


Exemplu


Afisarea datei curente folosind tabela DUAL.

SQL> SELECT SYSDATE

2 FROM DUAL;

 



















Operatii aritmetice cu date calendaristice


Din moment ce baza de date memoreaza datele calendaristice ca numere, rezulta ca asupra acestor date se pot efectua operatii aritmetice utilizind operatori aritmetici cum ar fi si - . Puteti deasemeni sa adunati sau sa scadeti constante numerice la date calendaristice.

Aveti posibilitatea de aefectua urmatoarele operatii


Operatie

Rezultat

Descriere

data + numar

data

aduna un numar de zile la o data

data – numar

data

scade un numar de zile dintr-o data

data – data

numar de zile

scade o data din cealalta

data + numar/24

data

aduna un numar de ore la o data





















Operatii aritmetice cu date calendaristice


Exemplul de mai sus prezinta o tabela cu numele angajatilor din departamentul 10 alaturi de perioada in care au fost angajati exprimata in saptamini.  Pentru a afiasa perioada angajarii in saptamini se face diferenta intre data curenta (data de SYSDATE) si data la care a fost angajata persoana si apoi se imparte rezultatul la 7.

Nota SYSDATE este o functie SQL ce intoarce data si timpul curent. Rezultatul pe care il obtineti daca probati exemplul poate sa difere de rezultatul de mai sus.

















Functii pentru date calendaristice


Functiile pentru date calendaristice opereaza asupra datelor calendaristice de tip Oracle. Toate functiile pentru date intorc o valoare de tip data cu exceptia functiei MONTH_BETWEEN, care intoarce o valoare numerica.

MONTHS_BETWEEN(data1, data2): Gaseste numarul de luni dintre data1 si data2. Rezultatul poate fi pozitiv sau negativ. Daca data1 este mai tirzie decit data2 atunci rezultatul este pozitiv. Daca data2 este mai tirzie decit data1 atunci rezultatul este negativ. Partea neintreaga a rezultatului reprezinta o parte din luna.

ADD_MONTHS(data,n): Aduna un numar de n luni la data. Numarul n trebuie sa fie intreg si poate fi negativ.

NEXT_DAY(data,’char’): Determina data calendaristica a urmatoarei zile specificate, din saptamina, care urmeaza datei “data

LAST_DAY(data): Determina data calendaristica a ultimei zile specificate, din saptamina, care urmeaza datei “data”

ROUND(data[,’fmt’]): Intoarce data rotunjita in functie de formatul fmt. Daca fmt este omis atunci data este rotunjita la cea mai apropiata data.

TRUNC(data[,’fmt’]): Intoarce data “data” trunchiata in functie de de formatul fmt. Daca fmt este omis atunci data este rotunjita la cea mai apropiata zi


Aceasta lista este un subset al functiilor disponibile. Modelele pentru format sint tratate mai tirziu in cadrul acestui capitol. Exemple de format sint month si year.


















Functii pentru date calendaristice (continuare).


Pentru toate persoanele care au fost angajate pe o perioada mai mica de 200 de luni, afisati numarul de ordine al angajatului , data angajarii, numarul de luni pe care persoana le-a acumulat ca angajat, data reviziei care trebuie facuta peste 6 luni, prima vineri de dupa data angajarii, ultima zi a lunii in care s-a facut angajarea.


SQL > SELECT empno, hiredate,

2 MONTHS_BETWEEN (SYSDATE, hiredate) TENURE,

3 ADD_MONTHS (hiredate, 6) REVIEW,

4 NEXT_DAY (hiredate, ‘FRIDAY’), LAST_DAY(hiredate)

5 FROM emp

6 WHERE MONTHS_BETWEEN (SYSDATE, hiredate) < 200;

 






EMPNO HIRDATE TENURE REVIEW NEXT_DAY( LAST_DAY(

----- ----- ------- ----- ----- ---- ----- ----- ---- ----- ----- ---- ----- ----- -------- ----- ----- -------

7839 17-NOV-81 192.24794 17-MAY-82 20-NOV-81 30-NOV-81

7698 01-MAY-81 198.76407 01-NOV-81 08-MAY-81 31-MAY-81

.

11 rows selected.

 




















Functii pentru date calendaristice (continuare).


Functiile ROUND si TRUNC pot fi utilizate atit pentu numere cit si pentru date calendaristice. Atunci cind sint utilizate cu date calendaristice, acestea rotunjesc sau truncheaza data tinind cont de modelul specificat. Astfel se pot , de exemplu, rotunji date calendaristice spre cel mai apropiat an sau cea mai apropiata luna.


Exemplu

Comparati datele in care s-au facut angajari pentru toate persoanele care au inceput sa lucreze in anul 1987. Afisati numarul de ordine al angajatului, data angajarii, si luna in care acesta a inceput sa lucreze exprimata sub forma unui interval, folosind functiile ROUND si TRUNC.


SQL > SELECT empno, hiredate,

2 ROUND (hiredate, ‘MONTH’), TRUNC(hiredate, ‘MONTH’)

3 FROM emp

6 WHERE hiredate like ‘%87’ ;

 
EMPNO HIREDATE ROUND(HIR TRUNC(HIR

----- ----- ------- ----- ----- ------ ----- ----- ------- ----- ----- -------

7788 19-APR-87 01-MAY-87 01-APR-87

7876 23-MAY-87 01-JUN-87 01-MAY-87

 


























Functii pentru conversia tipului de date


Pe linga tipurile de date din Oracle, coloanele tabelelor dintr-o baza de date Oracle8 pot fi definite utilizind tipuri de date ANSI, DB2 si SQL DS. Intern server ul Oracle face conversia din aceste tipuri de date in tipuri de date Oracle8

In unele situatii, server ul Oracle accepta anumite tipuri de date desi in mod normal ar trebui sa primeasca alte tipuri. Acest lucru se intimpla atunci cind server ul Oracle poate face automat conversia in tipul de date pe care il astepta. Aceste conversii se pot face implicit de catre server ul Oracle sau explicit de catre utilizator.

Conversiile de date implicite se fac conform unui set de reguli ce va fi detaliat mai tirziu.

Conversiile de date explicite se fac utilizind functii de conversie. Functiile de conversie transforma tipul unei valori in altul. In general functiile de conversie respecta urmatoarea forma: tip de data1 TO tip de data2 unde

tip de data1este tipul de data care trebuie transformat si reprezinta intrarea, iar tip de data2este tipul de data spre care se face conversia si reprezinta iesirea.

Nota Desi se fac conversii de date in mod implicit atunci cind este nevoie, este recomnadat ca aceste conversii sa fie facute implicit de catre utilizator pentru a sigura corectitudinea instructiunilor



















Conversii de date implicite


In operatii de atribuire Oracle poate automat conversia

Din VARCHAR2 sau CHAR in NUMBER

Din VARCHAR2 sau CHAR in DATE

Din NUMBER in VARCHAR2

Din DATE in VARCHAR2

Operatia de atribuire are loc cu succes daca server-ul Oracle poate converti tipul de data al sursei in tipul de data al destinatiei.














Conversii de date implicite


In cazul evaluarii expresiilor, Oracle poate automat conversia

Din VARCHAR2 sau CHAR in NUMBER

Din VARCHAR2 sau CHAR in DATE


In general server-ul Oracle utilizeaza regulile de conversie pentru expresii in cazul in care regulile de conversie pentru atribuire nu acopera si situatia respectiva.

Nota Conversia din CHAR in NUMBER are loc cu succes doar daca sirul de caractere reprezinta un numar valid. Conversia din CHAR in DATE are loc cu succes doar daca sirul de caractere respecta formatul implicit

DD-MON-YY.




















Conversii de date explicite


SQL pune la dispozitie trei functii cu ajutorul carora se pot face conversii dintr un tip de data in altul.


Functie

Scop

TO_CHAR (numar data calendaristica, ‘fmt’

Face conversia dintr-un numar sau o data calendaristica intr un sir de caractere de tipul VARCHAR2 respectind formatul fmt specificat.

TO_NUMBER (caracter)

Face conversia dintr-un sir de caractere ce contine cifre intr o valoare numerica

TO_DATE (caracter ,[‘fmt’])

Face conversia dint-un sir de caractere ce reprezinta o data intr-o valoare de tip DATE respectind formatul fmt specificat.

Daca fmt este omis formatul implicit este DD-MON-YY)


Nota Lista prezentata mai sus reprezinta un subset din functiile disponibile pentru conversii.


Pentru mai multe detalii consultati lucarea

Oracle Server SQL Reference. Release 8.0 “Conversion Function”




















Afisarea datei calendaristice intr-un anumit format


Pina acum toate datele calendaristice au fost afisate respectind formatul  DD-MON-YY. Functia TO_CHAR va permite sa faceti conversia din formatul implicit intr un format specificat de dumneavoastra


Observatii

Trebuie inclus intre ghilimele simple si este case sensitive

Poate include orice element valid al modelului de formatare pentru date calendaristice. Asigurati-va ca valoarea este separata de modelul de formatare prin virgula.

Pentru numele zilelor si a lunilor in iesire se adauga automat spatii albe.

Pentru a elimina spatiile si zerourile nesemnificative folositi elementul pentru modul de umplere.

Aveti posibilitatea de a redimensiona lungimea pe care se face afisarea pentru un cimp cu ajutorul comenzii SQL*Plus COLUMN.

Lungimea implicita a coloanei rezultate este de 80 caractere.


SQL > SELECT empno, TO_CHAR (hiredate, ‘MM/YY’) Month_Hired

2 FROM emp

3 WHERE ename=’BLAKE’;

 
























Exemple de elementele ale modelului de formatare


Element

Descriere

SCC sau CC

Secol:S precede data i.e.n cu

YYYY sau SYYYY

(an in cadrul datelor calendaristice

Anul: S precede data i.e.n cu

YYY sau YY sau Y

Ultimele 3,2 sau 1 cifre  din an

Y,YYY

O virgula in cadrul anului

[YYY,[YY,[Y,]

4,3,2 sau o cifra din an conform standardului ISO

SYEAR sau YEAR

Anul in litere :S precede data i.e.n cu

BC sau AD

Indicatorul BC AD

B.C. sau A.D.

Indicatorul BC AD cu puncte

Q

Sfertul unui an

MM

Luna scrisa cu doua cifre

MONTH

Numele intreg al lunii scris pe 9 caractere. Daca denumirea lunii nu ocupa cele 9 caractere, spatiul ramas liber este automat umplut cu spatii

MON

O abreviatie a denumirii unei luni formata din trei litere

RM

Luna scrisa cu cifre romane

WW sau W

Saptamina din an sau luna

DDD sau DD sau D

Ziua din an ,luna sau saptamina.

DAY

Denumirea completa a zilei completata eventual cu spatii pina la 9 caractere.

DY

O abreviatie a denumirii unei zile formata din trei litere

J

Numarul de zile de la data de 31 Decembrie 4713BC




















Modele de formatare pentru timp


Utilizati elementele descrise mai jos atunci cind doriti sa afisati timpul intr-un anumit format sau folosind litere in loc de cifre.


Element

Descriere

AM sau PM

indicator de meridian

A.M. sau P.M.

indicator de meridian cu puncte

HH sau HH12 sau HH24

ora

MI

minute (0

SS

secunde (0-59)

SSSSS

Numarul de secunde incepind cu miezul noptii


Alte formate

Element

Descriere


Punctuatia este reprodusa in rezultat.

“of the”

sirul incadrat intre ]ghilimele este reprodus


Specificati sufixe

Element

Descriere

TH

Numar de ordine dat in cifre (de exemplu DDTH pentru 4TH)

SP

Numar scris in litere (de exemplu DDSP pentru FOUR)

SPTH sau THSP

Numar de ordine scris in litere (de exemplu DDSPTH pentru FOURTH)





























Utilizarea functiei TO_CHAR impreuna cu date calendaristice


Exemplul de mai sus prezinta o modalitate de a  afisa numele si data angajarii pentru fiecare angajat.( De remarcat este formatul in care se afiseaza data.


Exemplu


Modificati exemplul de mai sus astfel incit data calendaristica sa aiba urmatorul format

Ex. Seventh of February 1981 08:00:00 AM

SQL > SELECT ename,

2 TO_CHAR (hiredate, ‘fmDdspth “of” Month YYYY fmHH:MI:SS AM’)

3 HIREDATE

3 FROM emp;

 






ENAME                              HIREDATE

----- ----- ---------- ----- ----- ------------

KING Seventeenth of November 1981 12:00:00 AM

BLAKE First of May 1981 12:00:00 AM

.

14 rows selected

 








De remarcat este faptul ca denumirea lunii respecta modelul pentru format specificat (INITCAP).






















Utilizarea functiei TO_CHAR impreuna cu valori numerice


Atunci cind lucrati cu valori numerice ca siruri de caractere ar trebui sa convertiti acele numere spre valori de tip caracter utilizind functia TO_CHAR, care face conversia dintre o valoare de tip NUMBER spre o valoare de tip VARCHAR2. Aceasta tehnica este folositoare in cadrul unei concatenari


Elemente de formatare pentru numere


Daca aveti de convertit un numar intr o valoare de tip caracter puteti utiliza urmatoarele elemente.


Element

Descriere

Exemplu

Rezultat


Pozitie numerica numarul cifrelor de 9 determina lungimea pe care se face afisarea




Afiseaza zerourile nesemnificative




Semnul dolar



L

Foloseste simbolul local pentru moneda

L999999

FF1234


Determina afisarea unui punct zecimal in pozitia specificata.




Determina afisarea unei virgule in pozitia specificata.



MI

Determina afisarea semnului minus in partea dreapta (pentru valori negative)

999999MI


PR

Inchide intre paranteze numerele negative

999999PR

<1234>

EEEE

Notatie stiintifica formatul impune existenta a patru litere E

99.999EEEE

1.234E

V

Inmultire cu 10 de n ori (n=numarul de cifre de 9 de dupa litera V)

9999V99


B

Inlocuieste valorile de 0 cu blank

B9999.99



















Observatii

Server-ul Oracle afiseaza semnul in locul valorii numerice a carui numar cifre a depasit valoarea specificata prin model.

Server ul Oracle rotunjeste valoarea zecimala stocata ca o valoare cu un numar de zecimale furnizat de catre modelul de formatare.




















Functiile TO_CHAR si TO_DATE


Este posibil sa apara o situatie in care doriti sa faceti conversia dintr un sir de caractere intr-un numar sau intr o data callendaristica. Pentru a realiza aceste tipuri de conversii utilizati functiile TO_NUMBER si TO_DATE. Modelul dupa care se face formatarea  va trebui sa-l alcatuiti pe baza elementelor pentru formatare prezentate anterior.


Exemplu

Afisati numele si data angajarii pentru toate persoanele care au fost angajate pe February


SQL > SELECT ename, hiredate

2 FROM emp

3 WHERE hiredate = TO_DATE (‘February 22, 1981’, ‘Month dd, YYYY’);

 





ENAME                              HIREDATE

----- ----- ---------- ----- ----- ----------

WARD 22-FEB-81

 

































Formatul RR pentru date calendaristice


Formatul RR pentru date calendaristice este similar cu elementul YY, dar va permite sa specificati secole diferite. Aveti posibilitatea de a folosi elementul pentru formatarea datelor RR in locul elementului YY si astfel secolul valorii returnate variaza in functie de cei doi digiti specificati in an si de ultimii doi digiti ai anului curent. Tabelul urmator descrie comportamentul elementului RR.


Anul curent

Data specificata

Formatul RR

Formatul YY


-OCT-95




27-OCT-17




27-OCT-17



















Functia NVL

Pentru a face conversia intre o valoare nula si o valoare efectiva utilizati functia NVL.


Sintaxa

NVL (expr1, expr2)

 



unde:  expr1 este valoarea sau expresia sursa care ar putea sa contina o valoare nula.

expr2 este valoarea tinta, valoarea spre care se face conversia

Aveti posibilitatea de a utiliza functia NVL impreuna cu orice tip de data, dar tipul valorii intoarse este de fiecare data la fel cu tipul parametrului expr1.


Conversii NVL pentru diferite tipuri de date


Tip de data

Exemplu de conversie

NUMBER

NVL (coloana ce contine o valoare de tip numeric

DATE

NVL (coloana ce contine o valoare de tip data       

calendaristica, ‘01-JAN-95’)

CHAR sau VARCHAR2

NVL (coloana ce contine o valoare de tip caracter,‘Unavariable’)





















Functia NVL


Pentru a calcula compensatia anuala pentru toti angajatii, trebuie sa inmultiti salariul lunar cu 12 si apoi sa adugati comisionul.

SQL> SELECT ename, sal, comm, (sal*12)+comm

2 FROM emp;


 




ENAME            SAL COMM (SAL*12)+NVL(COMM,0)


KING            5000

BLAKE           2850

CLARK 2450

JONES           2975

MARTIN          1250 1400 16400


14 rows selected.


.

14 rows selected.

 











Din exemplul precedent se poate remarca faptul ca compensatia anuala se calculeaza doar pentru acei angajati care au o valoare pentru comision nenula. Daca se intilneste pe colana o valoare nula atunci rezultatul este nul. Pentru a calcula valorile pentru toti angajatii trebuie sa convertiti valorile nule in valori numerice inainte de a aplica operatorul aritmetic. O solutie corecta pentru o astfel de problema este prezentata in exemplul precedent celui luat in discutie, exemplu in care pentru conversia valorilor nule s-a folosit functia NVL.



















Functia DECODE


Functia DECODE evalueaza o expresie intr-un mod similar structurii IF-THEN-ELSE, structura folosita in multe limbaje de programare. Funtia DECODE evalueaza expresia dupa ce o compara cu fiecare valoare search. Daca valoarea expresiei este la fel cu valoarea continuta in search atunci valoarea result este intoarsa.

Daca valoarea default implicita) este omisa functia va intoarce o valoare nula in cazul in care valoarea expresiei nu se potriveste cu nici o valoare search.
























Utlizarea functiei DECODE


In exemplul de mai sus valoarea evaluata este JOB. Daca JOB este ANALIST, sporul de salar este de 10%; daca JOB este CLERK, sporul de salar este de 15%  iar daca JOB este MANAGER, sporul de salar este de 20%.Pentru celelalte slujbe salariile nu se modifica.


Aceeasi structura scrisa cu IF-THEN-ELSE are urmatoarea forma

IF job = ‘ANALIST’ THEN sal = sal * 1.1

IF job = ‘CLERK’ THEN sal = sal * 1.15

IF job = ‘MANAGER’ THEN sal = sal * 1.20

ELSE sal = sal

 
























Imbricarea functiilor


Functiile de un singur rind se pot imbrica de cite ori dorim. Evaluarea lor se face din centrul expresiei imbricate spre exteriorul acesteia. Exemplele care urmeaza va vor demonstra flexibilitatea acestor functii.



















Imbricarea functiilor (continuare)


Exemplul de mai sus afiseaza acele persoane care nu are au superior. Evaluarea instructiunii SQL se realizeaza in doi pasi.

1. Evaluarea functiei din interior ce face conversia dintr-o valoare numerica in una de tip caracter.

- Rezultat1=TO_CHAR (mgr)

2. Evaluarea functiei din exterior care inlocuieste valorile nule cu un text

- NVL (Rezultat1, ‘No Manager’)


Denumirea coloanei este data de intreaga expresie din moment ce nu este specificat nici un alias pentru acea coloana.


Exemplu


Afisati data calendaristiaca a zilei de vineri ce urmeaza dupa sase luni de la data angajarii. Data rezultata ar trebui sa aiba o forma de genul Friday, March 12th, 1982. Ordonati rezultatul afisarii dupa data angajarii.


SQL > SELECT   TO_CHAR (NEXT_DAY (ADD_MONTHS

2 (hiredate, 6), ‘FRIDAY’) ,

3 ‘fmDay, Month ddth, YYYY’)

4 “Next 6 Month Review”

5 FROM emp

6 ORDER BY hiredate;

 





















Functii de un singur rind


Functiile de un singur rind se pot imbrica de cite ori dorim. Cu ajutorul functiilor de un singur rind putem manipula

Date de tip caracter

- LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR, LENGTH

Date de tip numeric

- ROUND, TRUNC, MOD

Date calendaristice

- MONTHS_BETWEEN, ADD_MONTH, NEXT_DAY, LAST_DAY, ROUND, TRUNC

- valorile de tip data calendaristica pot fi utilizate impreuna cu operatori aritmetici


Functiile de conversie pot converti valori numerice, valori de tip caracter si datelor calendaristice

- TO_CHAR, TO_DATE, TO_NUMBER



SYSDATE si DUAL


SYSDATE este o functie care intoarce data si timpul curent. . Tabela pe care o folositi ramine la latitudinea dumneavoastra. Se poate de exemplu folosi pentru afisarea datei tabela fictiva DUAL.

















Privire generala asupra exercitiilor


Exercitiile ce urmeaza sint astfel concepute incit sa aveti posibilitatea sa puneti in aplicatie cunostintelor acumulate pe parcursul acestei lectii cu privire la functiile pentru caractere,valori numerice, date calendaristice si tipuri de date.

Este bine sa va reamintiti ca in cazul functiilor imbricate evaluarea se face incepind cu functia din interior si terminind cu cea din exterior.



1. Scrieti o interogare care sa afiseze data curenta. Denumiti coloana Date


2.Afisati numarul de ordine,numele,salariul si salariu marit cu 15%(intr-un singur numar Denumiti ultima coloana Salar Nou. Salvati instructiunea intr-un fisier numit p3q2.sql


3.Rulati programul salvat anterior


4. Modificati programul salvat in fisierul p3q2.sql astfel incit acesta sa adauge o  coloana in care veti trece difereta dintre salariul nou si cel vechi. Denumiti coloana Crestere. Rulati noul  program.


5. Afisati numele angajatului, data angajarii, data cind se recalculeaza salariul, care este prima luni dupa 6 luni de servici. Denumiti coloana REVIEW. Formatati afisarea datei astfel incit sa arate similar cu exemplul de mai jos:

Ex. Sunday, the Seventh of September, 1981


6. Pentru fiecare angajat afisati numele si calculati numarul de luni intre data de astazi si data angajarii. Denumiti coloana LUNI_DE_ACTIVITATE. Ordonati rezultatul dupa numarul de luni de lucru. Rotunjiti numarul de luni.


7. Scrieti o interogare care sa produca urmator afisaj pentru fiecare angajat

<nume angajat> cistiga <salariu> lunar dar ar dori <3 * salariu>. Denumiti coloana Salariul de vis.


8. Scrieti o interogare care sa afiseze numele si salariul pentru toti angajatii. Afisati valoarea salariului pe 15 caracter aliniata la dreapta iar spatiul ramas la stinga sa fie umplut cu caracterul $. Denumiti coloana SALARIU.


9. Scrieti o interogare care sa afiseze numele angangajatului cu litere mici cu exceptia primei litere care se va scrie cu litera mare si lungimea numelui.


10. Afisati numele, data angajarii si ziua din saptamina in care angajatul a inceput lucrul. Denumiti coloana ZI.

Ordonati rezultatul dupa cimpurile coloanei ZI incepind cu Monday (Luni).


11. Scrieti o interogare care sa afiseze numele angajatului si valoarea comisionului. Daca angajatii nu obtin comision introduceti No commission”. Denumiti coloana COMM.





















Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright

stiinta

Baze de date



Access
Autocad
Baze de date
C
Calculatoare
Catia
Excel
Foxpro
Grafica design
Html
Internet
Java
Linux
Mathcad
Matlab
Oracle
Outlook
Photoshop
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word

Analize pe aceeasi tema


Aplicatii practice rezolvate – baze de date
Operatii cu fisiere *.dbf
Protocolul DDE
VISUAL FOX PRO (VFP) - tipuri de programare
Descrierea si folosirea aplicatiei - baze de date
Conceptele de Data si Fisier
Prezentarea generala a mediului visual fox pro
Limbajul sql si vba
Descrierea limbajului SQL
Instructiuni utilizate cu obiecte in VBA



Ramai informat
Informatia de care ai nevoie
Acces nelimitat la mii de documente. Online e mai simplu.

Contribuie si tu!
Adauga online documentul tau.