Sunteți pe pagina 1din 4

Funcii asupra datelor calendaristice Una dintre caracteristicile importante ale Oracle este abilitatea de a memora i opera cu date

calendaristice. Tipurile de date calendaristice recunoscute de Oracle sunt: DATE - valorile avnd acest tip sunt memorate ntr-un format intern specific, care include pe lng ziua, luna i anul, de asemenea ora, minutul, i secunda. TIMESTAMP valorile avnd acest tip memoreaz data calendaristic, ora, minutul i secunda dar i frac!iunea de secund. TIMESTAMP WITH [LOCAL] TIME ZONE este similar cu TIMESTAMP, ns se va memora i diferen!a de fus orar fa! de ora universal, a orei de pe serverul bazei de date, sau a aplica!iei client, n cazul n care se include op!iunea LOCAL. INTERVAL YEAR TO MONTH memoreaz o perioad de timp n ani i luni. INTERVAL DAY TO SECOND memoreaz un interval de timp n zile, ore, minute i secunde. Aritmetica datelor calendaristice Oracle tie s realizeze opera!ii aritmetice asupra datelor calendaristice, astfel adugarea valorii 1 la o dat calendaristic, va duce la ob!inerea urmtoarei date calendaristice: SELECT sysdate, sysdate+5, sysdate !" #$%& d'a( SYSDATE SYSDATE+5 SYSDATE-70 "#-$%&-#' "(-$%&-#' #'-)*+-#' $dunarea unui numr ntreg la o dat calendaristic ,e asemenea se poate face diferen!a dintre dou date calendaristice, ob!inndu-se numrul de zile dintre cele dou date: Funcii cu date calendaristice Oracle ofer un numr foarte mare de func!ii care opereaz asupra datelor calendaristice, dar n cele ce urmeaz ne vom opri asupra celor mai importante dintre acestea. SYSDATE returneaz data i ora curent a serverului bazei de date. C)RRENT*DATE returneaz data i ora curent a aplica!iei client. $ceasta poate s difere de data bazei de date. SYSTIMESTAMP returneaz data n formatul TIMESTAMP.

se(e+t C)RRENT*DATE, sysdate, syst,&esta&- #$%& d'a( CURRENT_DATE SYSDATE SYSTIMESTAMP "#-$%&-'"#-$%&-'- "#-$%&-'- '..//./"...0'1# $2 -'0:'' )unc!iile SYSDATE, C)RRENT*DATE i SYSTIMESTAMP ADD*MONTHS.data,/$('/,0 adaug un numr de luni la data curent. ,ac al doilea parametru este un numr negativ, se realizeaz de fapt scderea unui numr de luni din data precizat.

Exemplu se(e+t sysdate, ADD*MONTHS.sysdate,10 #$%& d'a( se(e+t sysdate, ADD*MONTHS.sysdate, 10 #$%& d'a( Rezultatul afi at 1! 2E3 "! 1! APR "! 1! 2E3 "! 1! DEC "!

MONTHS*3ETWEEN.data1,data10 determin numrul de luni dintre dou date calendaristice precizate. &ezultatul returnat poate fi un numr real . ,ac prima dat este mai mic 3o dat mai vec4e5 atunci rezultatul va un numr negativ.

se(e+t sysdate, sysdate+!", MONTHS*3ETWEEN.sysdate, sysdate+!"0, MONTHS*3ETWEEN.sysdate+!", sysdate0 #$%& d'a(


SYSDATE SYSDATE+70 M!NT"S_#ET$EEN%SYSDATE&SYSDATE+70' M!NT"S_#ET$EEN%SYSDATE+70&SYSDATE'

/'-6*%-#' '7-,*8-#'

-"./""01'(.0#(#"7'/""01'( .0#(#"7'/""01'-

"./""01'(.0#(#"7'/""01'( .0#(#"7'/""01'(0

LEAST.data1,data1,40 determin cea mai vec4e 3cea mai mic5 dat dintre cele transmise ca parametru. 5REATEST.data1,data1,40 determin cea mai recent 3cea mai mare5 dat dintre cele transmise ca parametru.

NE6T*DAY.data, 78,'a70 returneaz urmtoarea dat de 78,'a7 de dup data transmis ca parametru, unde 78,'a7 poate fi 7M%/day7, 7T'esday7 etc. 9n e:emplele care urmeaz data curent este considerat ziua de mar!i, "- februarie "''-. LAST*DAY.data0 returneaz ultima zi din luna din care face parte data transmis ca parametru. Exemplu Rezultatul afi at Se(e+t "1 MAR "! /e9t*day.sysdate,72$,day70 #$%& d'a( Se(e+t ": MAR "! /e9t*day.sysdate,7T)ESDAY70 Explicaie. 84iar dac ziua curent este o zi de #$%& d'a( mar!i, func!ia va returna urmtoarea zi de mar!i. Se(e+t (ast*day.sysdate0 1; 2E3 "! #$%& d'a( Se(e+t (ast*day.sysdate+1"0 <1 MAR "! #$%& d'a( Se(e+t 1= 2E3 "! (ast*day.ADD*MONTHS.sysdate,1100 Explicaie. ;iua returnat de sysdate este 1! #$%& d'a( 2E3 "!, la care adugm 11 luni, deci ob!inem data de 1! 2E3 ";, iar anul 1""; este un an bisect de aceea ultima zi din lun este 1= 2E3 ";. RO)ND.data,7#%$&at70 dac nu se precizeaz formatul, func!ia rotun<ete data transmis ca parametru la cea mai apropiat or 11 AM, adic dac ora memorat n data este nainte de miezul zilei atunci se va returna ora 11 AM a datei transmise.

"

,ac ora memorat n data este dup miezul zilei se va returna ora 11 AM a zilei urmtoare. se(e+t t%*+>a$.sysdate,7dd MON YY >>?&, AM70, $%'/d.sysdate0 #$%& d'a( T!_C"AR%SYSDATE&(DD-M!N-YY"")MIAM(' R!UND%SYSDATE' "#-$%&-'- '.:.# $2 "#-$%&-')unc!ia RO)ND 9n cazul n care este specificat formatul, data va fi rotun<it conform formatului indicat. 8teva dintre formatele cele mai uzuale sunt: y, yy, yyyy, yea$ se rotun<ete data la cea mai apropiat dat de # =anuarie. ,ac data este nainte de # iulie, se va returna data de # ianuarie a aceluiai an. ,ac data este dup data de # iulie se va returna data de # ianuarie a anului urmtor. &&, &%/t> rotun<ete data la cel mai apropiat nceput de lun. Orice dat calendaristic aflat dup data de 1:, inclusiv, este rotun<it la prima zi a lunii urmtoare. @@, @eeA se rotun<ete data la cel mai apropiat nceput de sptmn. %rima zi a sptmnii este considerat lunea. %entru datele aflate dup ziua de <oi, inclusiv, se va returna ziua de luni a sptmnii urmtoare. Exemplu select sysdate, round(sysdate,'year'), round(ADD_MONTHS(sysdate,5), 'year') from dual select sysdate, round(sysdate,'mm'), round(sysdate(%),'mm'), round(sysdate(%7,'mm') from dual select sysdate, round(sysdate,',,'), round(sysdate(%,',,'), round(sysdate(2,',,') from dual Rezultatul afi at 27 !"# $7 $% &AN $7 $% &AN $' 27 $% $% $% 27 2) 2) $5 !"# MA* MA* A+* !"# !"# !"# !"# $7 $7 $7 $7 $7 $7 $7 $7

TR)NC.data,7#%$&at70 trunc4eaz data specificat conform formatului specificat. 6e pot folosi aceleai formate ca i n cazul func!iei RO)ND. Exemplu Rezultatul afi at select sysdate, 27 !"# $7 trunc(sysdate,'year'), $% &AN $7 trunc(ADD_MONTHS(sysdate,5), $% &AN $7 'year') from dual select sysdate, 27 !"# $7 trunc(sysdate,'mont-'), $% !"# $7 $% MA* $7 trunc(sysdate(%),'mont-'), $% MA* $7

trunc(sysdate(%7,'mont-') from dual select sysdate, trunc(sysdate,',,'), trunc(sysdate(%,',,'), trunc(sysdate(2,',,') from dual

27 2) 2) 2)

!"# !"# !"# !"#

$7 $7 $7 $7