Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • OS
  • Funksionet e datës së Oracle. Një udhëzues i shkurtër praktik për një zhvillues të sistemeve të informacionit bazuar në bazën e të dhënave Oracle

Funksionet e datës së Oracle. Një udhëzues i shkurtër praktik për një zhvillues të sistemeve të informacionit bazuar në bazën e të dhënave Oracle

Si data e tërheqjes nga baza e të dhënave në format i përshtatshëm d.m.Y. (ditë.muaj.vit) Orakull. Funksioni to_char() do të na ndihmojë. Falë tij, ju mund ta konvertoni kohën në formatin e dëshiruar. Shikoni shembullin.

SELECT to_char(current_timestamp, "DD.MM.YYYY") si date_create nga DUAL

Formati i kohës DD.MM.VVVV (dita.muaj.vit). Ju mund të përdorni çdo karakter si ndarës: /, :, -.

Për të shfaqur kohën aktuale në formatin ditë.muaj.vit orë:minuta:sekonda, përdorni parametrat DD.MM.YYYY HH24:MI:SS.

SELECT to_char(current_timestamp, "DD.MM.YYYY HH24:MI:SS") si date_create nga DUAL /* output: 10/06/2017 16:50:52 */

Le të themi se duhet të shfaqni fillimin e vitit? Viti aktual do të zëvendësohet automatikisht për ju. Në këtë shembull kam përdorur lidhjen ||. Më shumë informacion i detajuar do të gjeni faqen TO_CHAR FUNCTION. Në atë faqe është listë e madhe opsionet për konvertimin e një date në një varg.

ZGJIDH "01.01." || to_char(current_timestamp, "YYYY") si date_create nga DUAL

Shikimet: 1762, niveli: niveli i lehtë, vlerësimi: 0, data: 26-10-2016 14:07:32

Në këtë seksion do të flasim për funksionet për të punuar me funksionet e konvertimit të datës/kohës dhe tipit për datat. Për të ruajtur datën dhe kohën, Oracle ofron një lloj të veçantë DATE. ME pikë fizike shikoni atë një numër thyesor, pjesë e tërë e cila ruan numrin e ditëve që nga një datë e caktuar bazë, dhe ajo e pjesshme ruan kohën. Kjo ju lejon të performoni mbi datat veprimet aritmetike- mbledhje dhe zbritje.

Funksioni SYSDATE

Ky është një nga funksionet më të përdorura; kthen datën dhe kohën aktuale sipas orës së serverit. Shembull:

ZGJIDH SISDATIN
NGA dyfishtë

SYSDATE
26.12.2007 16:24:43

Funksioni ADD_MONTHS(d, x)

Rikthen datën e marrë duke shtuar një ose më shumë muaj datës d. Numri i muajve specifikohet nga parametrat x, dhe x mund të jetë negativ - në këtë rast, numri i specifikuar i muajve zbritet nga data e dhënë.

ZGJIDH SISDATE d,
ADD_MONTHS(SYSDATE, 3) d1, ADD_MONTHS(SYSDATE, -3) d2
NGA dyfishtë

26.12.2007 16:24:43

26.03.2008 16:24:43

26.09.2007 16:24:43

Funksioni LAST_DAY(d).

Kthen ditën e fundit të muajit të përcaktuar në datën d. Shembull:

ZGJIDH SISDATE d,
DITA_E FUNDIT(SYSDATE) d1
NGA dyfishtë

26.12.2007 16:24:43

31.12.2008 16:24:43

Ky funksion është shumë i përshtatshëm për përcaktimin e numrit të ditëve në një muaj të caktuar, për shembull:

ZGJIDH SISDATE d,
TO_CHAR(DITA_FUNDIT(SYSDATE), "DD") d1
NGA dyfishtë

26.12.2007 16:24:43

Funksioni MONTHS_BETWEEN(dl, d2)

Funksioni MONTH_BETWEEN kthen numrin e muajve midis dy datave dl dhe d2, duke marrë parasysh shenjën si dl-d2, numri i kthyer është një fraksion.

ZGJIDH MUAJT_BETWEEN("2.09.2006", "2.05.2006") d1,
M0NTHS_BETWEEN("12.09.2006", "2.05.2006") d2,
M0NTHS_BETWEEN("2.05.2006", "12.09.2006") d3
NGA dyfishtë

4,32258064516129

4,32258064516129

Funksioni TRUN C (d[,maskë ])

Shkurt datën e specifikuar sipas maskës. Nëse maska ​​nuk është e specifikuar, atëherë shkurtimi kryhet para datës (ora hidhet poshtë).

ZGJIDH SISDATEd1,
TRUNC(SYSDATE) d2
NGA dyfishtë

26.09.2006 16:45:26

Le të shohim shembuj tipikë - shkurtimi i një date në orë, ditë, muaj dhe vit. Maska e formatit të paracaktuar është "DD"

ZGJIDH SISDATEdl,
TRUNC(SYSDATE, "HH24") d2,
TRUNC(SYSDATE, "DD") d3,
TRUNC(SYSDATE, "MM") d4,
TRUNC(SYSDATE, "YYYY") d5
NGA dyfishtë

26.09.2006 16:49:21

26.09.2006 16:00:00

26.09.2006 01.09.2006 01.01.2006

Funksioni ROUND(d[,maskë])

Funksioni ROUND është i ngjashëm me TRUNC, por në vend të shkurtimit, ai rrumbullakoset. Maska e formatit të paracaktuar është "DD". Shembull:

ZGJIDHSYSDATEd1,
RRUmbullakët (SYSDATE)d2,
RRUmbullakët(SYSDATE," NN24") d3,
RRUmbullakët(SYSDATE, " DD") d4,
RRUmbullakët(SYSDATE,"MM") d5
NGA dyfishtë

26.09.2006 16:50:50

27.09.2006 26.09.2006 17:00:00

27.09.2006 01.10.2006

Formatoni maskat e lejuara për funksionet TRUNC dhe ROUND

Le të hedhim një vështrim më të afërt në maskat e formatit dhe veçoritë e përdorimit të tyre:

Qëllimi

Dita e parë e shek

VITI, ose YYYY,

Dita e pare e vitit

ose YY ose Y

Dita e parë e tremujorit

MUAJ, ose HËN,

Dita e parë e muajit

E njëjta ditë e javës me ditën e vitit aktual

E njëjta ditë e javës me ditën e muajit aktual

DAY ose DY ose D

Dita e parë e javës

NN, ose NN12, ose

Funksioni TO_DATE(rr[,maskë [,nls_lang]])

Funksioni TO_DATE konverton vargun str në një datë. Konvertimi kryhet duke përdorur maskën e maskës, nëse është e specifikuar. Nëse maska ​​nuk është e specifikuar, atëherë merret maska ​​e paracaktuar. Nëse specifikoni një maskë, mund të specifikoni një parametër më shumë - gjuhën e përdorur kur formatoni emrat e muajve dhe ditëve. Nëse ka një gabim në analizimin e vargut str në përputhje me specifikuar

lind një maskë situatë e jashtëzakonshme. Gabimi më i zakonshëm është "ORA-01830: Shablloni i formatit të datës përfundon përpara se të konvertohet i gjithë vargu i hyrjes." Për më tepër, shpesh haset gabimi "ORA-01821: formati i datës nuk njihet" - ndodh kur specifikohet një maskë e formatit të pavlefshëm. Shembull:

SELECT T0_DATE("12.09.2006") d
NGA dyfishtë

Funksioni TO_CHAR(d[,maskë])

Konverton datën d në një varg karakteresh sipas maskës së specifikuar. Nëse specifikohet një maskë e pavlefshme, ngrihet përjashtimi "ORA-01821: formati i datës nuk njihet". Shembull:

ZGJEDH SISDATE d1,
TOLCHAR(SYSDATE, "DD.MM.YY HH24:MI") d2
NGA dyfishtë

Ky artikull i kushtohet formateve të datave në Oracle dhe disa veçorive të përpunimit të tyre. Artikulli ofron një përmbledhje të disa maskave standarde të formatimit të datave, konvertimin e qartë dhe të nënkuptuar të vargjeve në data, dhe Opsione shtesë, duke ndikuar në këtë proces. Ashtu si në pjesën e parë të artikullit, diskutimi i materialit bazohet në shembuj që demonstrojnë aftësi formatimi jo standarde. Mekanizmat e Oracle të përfshirë në proces janë shqyrtuar në detaje konvertim i nënkuptuar. Përshkrimet e shumicës së veçorive shoqërohen me lidhje me seksionet përkatëse të dokumentacionit.

Fillimisht, nuk kam planifikuar të shkruaj një artikull për datat, por do të fokusohesha në shqyrtimin e vetëm një çështjeje në këtë temë. Megjithatë, gjatë punës lindi nevoja për të ndriçuar të ndryshme veçori shtesë Oracle, shembuj të rinj filluan të shfaqen. Pra, shqyrtimi i një çështjeje u shndërrua në një artikull të vogël. Shpresoj se doli jo e mërzitshme, pavarësisht nga tema jo më interesante.

Gjendet pjesa e parë e artikullit, kushtuar veçorive të porosisë nga operatori, funksionimi i jo in dhe një shembull i konvertimit të tipit të nënkuptuar.

funksionin to_date dhe formatet e datës

Pak programues pëlqejnë formatimin e temave. Për shembull, disa kurse fokusohen në mënyrë specifike në formatimin e datave dhe formatimin lokal. orët e fundit ditën e fundit të trajnimit, sepse dëgjuesit janë të mërzitur. Arsyeja është në sasi të mëdha formatet ekzistuese me përdorimin e tyre relativisht të rrallë në detyra standarde. Tre funksionet më të zakonshme që përdorin maska ​​janë to_number, to_char dhe to_date. Në të tre rastet, maska ​​vjen e dyta parametër opsional. Dhe nëse ka ende një numër pak a shumë të arsyeshëm maskash për formatimin e numrave, atëherë ka një numër të pahijshëm maskash për formatimin e datave, plus prapashtesa dhe modifikues.

Sigurisht, disponueshmëria sasi e madhe maska ​​është gjë pozitive, meqenëse zgjeron mundësitë, për shembull, mund të kontrolloni nëse 13 shtatori 2011 është dita e programuesit, duke përdorur maskën "DDD", e cila kthen numrin e ditës në vit:
--Kërkesa nr. 1 zgjidhni to_char(to_date("09/13/2011"),"DDD") "Dita e programuesve" nga dual;
Pavarësisht përfitimeve të dukshme të formatimit, nuk kam planifikuar të përfshij një përmbledhje të formateve të datave dhe shembujve të përdorimit të maskave ekzotike në pjesën e dytë të artikullit. Së pari, kjo nuk ka gjasa të jetë me interes për askënd, dhe së dyti, autori nuk është gjithashtu një tifoz i madh i formatimit kompleks, pasi ai rrallë e përdor atë në jetë. Arsyeja e vetme e paraqitjes këtë seksion– disa pyetje që lexuesit kanë në lidhje me përdorimin e formatit RR.

Përpara se të kalojmë drejtpërdrejt në temën kryesore të këtij seksioni, le të shohim disa shembuj jo standard duke punuar me datat.

Shembulli nr. 1. Përdorimi i shablloneve të zhveshur
Le të fillojmë me formatimin standard. Le të jetë data e sotme 16.09.2011, a do të ekzekutohen pyetjet e mëposhtme dhe çfarë do të kthehen?
--Kërkesa nr. 2 zgjidhni to_char(sysdate, "YYYY") nga dual; --Kërkesa nr. 3 zgjidhni to_date("03", "DD") nga dual;
Pyetja #2 është një shembull tipik i konvertimit të një date në një varg dhe transmetimit të saj formati i kërkuar. Dallimi i vetëm është se në vend të maskave më të njohura si "DD.MM.YY" ose "DD-HËN-YYYY", ne përdorëm një maskë që specifikon vetëm vitin. Pyetja #2 do të ekzekutohet me sukses dhe do të kthejë vitin aktual në format katërshifror, d.m.th. "2011".

Pyetja #3 është pak më interesante, është një shembull tipik i një konvertimi eksplicit të një vargu në një datë me një maskë formati të cunguar, kështu që, nga pikëpamja sintaksore, pyetja është e saktë dhe do të ekzekutohet me sukses. Pyetja më e rëndësishme është rezultati i zbatimit të saj, d.m.th. në cilën datë do të kthehet nëse jepet vetëm dita? Para se të përgjigjeni kjo pyetje Le të kujtojmë se si Oracle e cakton kohën nëse nuk është caktuar në mënyrë eksplicite:
--Kërkesa nr. 4 zgjidhni to_char(to_date("02/03/2011","DD.MM.YYYY"),"DD.MM.YYYY HH24:MI:SS") nga dual; --Kërkesa nr. 5 zgjidhni to_char(to_date("02/03/2011 30", "DD.MM.YYYY MI"),"DD.MM.YYYY HH24:MI:SS") nga dual;
Në kërkesën nr. 4 koha nuk është e specifikuar, në kërkesën nr. 5 tregohet vetëm numri i minutave, orët dhe sekondat janë hequr. Ekziston një rregull në Oracle sipas të cilit, nëse nuk ka komponentë kohore në një datë, atëherë koha vendoset automatikisht në 00:00:00 (d.m.th. mesnatë), nëse specifikohet vetëm një pjesë e elementeve kohore (si në pyetje nr. 5), atëherë elementët që mungojnë vendosen në 00. Prandaj, pyetja nr. 4 do të kthejë vargun “02/03/2011 00:00:00”, dhe pyetja nr. 5 do të kthejë “02/03/2011 00:30:00”.

Le të kthehemi te kërkesa nr. 3, a është e vërtetë kjo? këtë rregull për datat, d.m.th. A mungojnë elementët e datës gjatë konvertimit me 00 ose 01? Po, ato janë zëvendësuar, por jo të gjitha; më saktë, për elementët e datës që mungojnë, përdoren vlerat nga sysdate (dita e parë e muajit aktual të vitit aktual). Prandaj, pyetja #3 do të përdorë 09 si muaj dhe 2011 si vit, kështu që rezultati i pyetjes do të jetë 09/03/2011.

Shembulli nr. 2. Rendi i opsioneve të formatimit
A do të ketë sukses pyetja e mëposhtme dhe nëse po, në cilën datë do të kthehet?
--Kërkesa nr. 6 zgjidhni to_date("20092011", "YYYYDDMM") nga dual;
Në pamje të parë, mungesa e kufijve në vargun e datës mund të duket të jetë një faktor kritik i papajtueshëm me ekzekutimin e pyetjes, por maska ​​e datës specifikohet gjithashtu pa kufij dhe vargu që do të konvertohet përputhet me modelin e specifikuar. Prandaj, kërkesa nr. 6 do të ekzekutohet me sukses dhe do të kthehet më 20.11.2009 (formati i rezultatit mund të ndryshojë pak në varësi të cilësimeve të sesionit). Në shembullin e mëposhtëm do t'i shikojmë çështjet që lidhen me kufijtësit më në detaje.

Shembulli nr. 3. Konvertimi i nënkuptuar

--Kërkesa nr. 7 zgjidhni months_between("1\September-9","01$Tet/08") nga dual;
këtë kërkesë janë specifikuar dy parametra të vargut që duhet të konvertohen në data duke përdorur konvertimin e nënkuptuar. Sipas dokumentacionit, kur përdoren formatet e paracaktuara, vargu që do të konvertohet në mënyrë implicite në një datë duhet të plotësojë modelin: ndarës1 ndarës2. Shumica e ndarësve dhe ndarësve mund të përdoren si ndarës1 dhe ndarës2 personazhe të veçanta, duke përfshirë hapësirat, skedat, dhe " dhe dyshe citat i vetëm"". Për më tepër, nëse rreshti përmban të paktën dy shifra për të specifikuar ditët, muajt dhe vitet, atëherë ndarësi mund të hiqet fare. Për shembull:
--Kërkesa nr. 8 zgjidhni to_date("01September09") nga dual; --Kërkesa nr. 9 zgjidhni to_date("01Sep09") nga dual; --Kërkesa #10 për këtë kërkesë, formati i parazgjedhur i datës duhet të jetë DD.MM.RR zgjidhni deri në_date("010909") nga dyfishi;
Meqenëse të dyja linjat e specifikuara në kërkesën nr. 7 përputhen me modelin e dhënë, kërkesa do të ekzekutohet me sukses dhe do të kthejë numrin 11.

Shembulli nr. 4. Parametrat e funksionit to_date
Lëreni formatin e paracaktuar të datës të jetë DD.MON.RR dhe gjuha e datës të jetë rusisht, pyetja e mëposhtme do të funksionojë:
--Kërkesa nr. 11 zgjidh to_date(sysdate,"mm/dd/vvvv hh24:mi:ss") nga dual;
Një kërkesë e ngjashme u shfaq në një nga diskutimet në faqen ask Tom. Kurthi i kërkesës është se ne po përpiqemi të konvertojmë një datë (sysdate) në një datë. Nëse kërkesa dukej kështu:
--Kërkesa nr. 12 zgjidhni to_char(sysdate,"mm/dd/vvvv hh24:mi:ss") nga dual;
Ai ekzekutim do të kishte sukses dhe do të kthente vargun "15.09.2011 23:00:11". Sidoqoftë, funksioni to_date pret një varg si parametrin e tij të parë, kështu që së pari e konverton në mënyrë implicite datën në një varg (që është ekuivalente me thirrjen në_char(sysdate) me maskën e paracaktuar). Rezultati i këtij konvertimi është vargu “09/15/11”, atëherë thirret data_date. Kështu, pyetja #11 është ekuivalente me pyetjen e mëposhtme:
--Kërkesa nr. 13 zgjidhni to_date("09/15/11","mm/dd/vvvv hh24:mi:ss") nga dual;
Duke qenë se nuk është e vështirë për t'u verifikuar, kërkesa nr. 13 nuk mund të ekzekutohet, pasi rreshti "09.15.11" nuk përputhet me maskën e vendosur, për rrjedhojë, kërkesa nr. 11 gjithashtu nuk mund të ekzekutohet.

Vendosni formatin e paracaktuar të datës
Formati i paracaktuar i datës përcaktohet nga dy parametra: NLS_DATE_FORMAT (përgjegjës për vetë formatin) dhe NLS_DATE_LANGUAGE (përgjegjës për gjuhën që do të përdoret kur shkruani emrat e ditëve, muajve, etj.). Nëse këto parametra nuk janë caktuar në mënyrë eksplicite, vlerat e tyre vendosen bazuar në parametrin NLS_LANG.

Ekzistojnë tre nivele në të cilat mund të vendosni formatin e datës:

  1. Niveli i bazës së të dhënave: zgjidhni * nga nls_database_parameters ku parametri është në ("NLS_DATE_FORMAT","NLS_DATE_LANGUAGE"); Parametrat e këtij niveli vendosen gjatë krijimit të bazës së të dhënave dhe shkruhen në skedarin init.ora.
  2. Niveli i shembullit: zgjidhni * nga nls_instance_parameters ku parametri është në ("NLS_DATE_FORMAT","NLS_DATE_LANGUAGE"); Parametrat në këtë nivel vendosen kur instanca fillon dhe mund të ndryshohen duke përdorur komandën ALTER SYSTEM.
  3. Niveli i sesionit: zgjidhni * nga nls_session_parameters ku parametri është në ("NLS_DATE_FORMAT", "NLS_DATE_LANGUAGE"); Parametrat në këtë nivel mund të ndryshohen me komandën ALTER SESSION. Ju gjithashtu mund të kontrolloni vlerën e këtyre parametrave duke përdorur pyetjen: zgjidhni SYS_CONTEXT ("USERENV", "NLS_DATE_FORMAT"), SYS_CONTEXT ("USERENV", "NLS_DATE_LANGUAGE") nga dyfishi;
Parametrat e çdo niveli tjetër "mbishkruan" parametrat e atij të mëparshmi, d.m.th. Nëse keni vendosur parametrat e nivelit të sesionit, atëherë parametrat e niveleve të tjera nuk do të ndikojnë në seancën tuaj. Për të vendosur një format të vetëm të datës për të gjitha seancat, Tom në kolonën e tij sugjeron përdorimin e këmbëzës ON-LOGON: krijoni ose zëvendësoni këmbëzën data_logon_trigger pasi të identifikoheni ON BAZA TË TË DHËNAVE filloni të ekzekutoni menjëherë "ndryshoni sesionin e sesionit nls_date_format = ""dd/mm/vvvv""" ; fundi;
Shembulli nr. 5. Formatoni DD.MM.RR kundrejt DD-MON-RR
Unë u frymëzova t'i kushtoja vëmendje formatimit të paracaktuar të datave për shkak të disa çudive në konvertimin e nënkuptuar të vargjeve në data. le të shqyrtojmë shembulli tjetër:
--Kërkesa nr. 14 --Cakto formatin e paracaktuar të datës për të ndryshuar grupin e sesionit NLS_DATE_FORMAT="DD.MM.RR"; --Cakto datën e parazgjedhur të sesionit të ndryshimit të gjuhës së sesionit NLS_DATE_LANGUAGE="AMERICAN"; --Kontrollo vlerën e parametrave të sesionit zgjidhni * nga nls_session_parameters ku parametri është në ("NLS_DATE_FORMAT","NLS_DATE_LANGUAGE"); --Convert strings to date select to_date("11.09.11") nga dual; zgjidhni to_date ("11.SHAN.11") nga dual;
Është logjike të supozohet se konvertimi i vargut "11.09.11" në një datë do të jetë i suksesshëm, por konvertimi i vargut "11.SEP.11" jo. Sidoqoftë, nuk është kështu; të dy konvertimet do të kenë sukses. Në fillim, supozova se nëse është e pamundur të konvertohet një varg duke përdorur një maskë sesioni, Oracle përpiqet të përdorë maska ​​të niveleve të tjera (maska ​​ime e nivelit të bazës së të dhënave është vendosur në "DD-MON-RR"). Leximi i dokumentacionit tregoi se nuk është kështu, dhe Oracle udhëhiqet nga parimet e përshkruara në paragrafin e mëparshëm.

Le të provojmë një shembull tjetër:
--Kërkesa nr. 15 --Cakto formatin e paracaktuar të datës për ndryshimin e sesionit të sesionit NLS_DATE_FORMAT="DD.MON.RR"; --Cakto datën e parazgjedhur të sesionit të ndryshimit të gjuhës së sesionit NLS_DATE_LANGUAGE="AMERICAN"; --Kontrollo vlerën e parametrave të sesionit zgjidhni * nga nls_session_parameters ku parametri është në ("NLS_DATE_FORMAT","NLS_DATE_LANGUAGE"); --Convert strings to date select to_date("11.09.11") nga dual; zgjidhni to_date ("11.SHAN.11") nga dual;
Nëse mendoni se rezultati do të jetë identik me kërkesën e mëparshme, atëherë gaboheni. Një nga konvertimet do të dështojë. NË në këtë rast vargu "11.09.11" nuk përputhet me modelin. Ndoshta ky është misticizëm?

Fatkeqësisht jo. Leximi i dokumentacionit tregoi se ekzistojnë rregulla për zëvendësimin automatik të elementeve të formatimit të datës. Më poshtë është një tabelë e zëvendësimeve.

Elementi i formatit origjinal Elemente shtesë të formatit për t'u provuar në vend të origjinalit
"MM" "MON" dhe "MUAJ"
"HËN "MUAJ"
"MUAJ" "hëna"
"YY" "YYYY"
"RR" "RRRR"
Duke parë përmbajtjen e kësaj tabele, bëhet e qartë se formati "DD.MM.RR" përmban në mënyrë implicite formatin "DD.MON.RR" (si dhe "DD.MONTH.RR" e të tjera), por formatin Formati "DD .MON.RR" "DD.MM.RR" nuk është i pranishëm, gjë që shpjegon sjelljen e kërkesave nr.14 dhe nr.15.

Shembulli nr. 6. Formati RR vs YY
Shumica e përdoruesve janë të vetëdijshëm për ndryshimet midis maskave RR dhe YY, por ka edhe nga ata që ky informacion do të jetë e dobishme. Le të kalojmë drejtpërdrejt te shembulli. Çfarë të dhënash do të kthejnë pyetjet e mëposhtme:
--Kërkesa nr. 16 zgjidhni to_date("11","RR") "RR", to_date("11","YY") "YY" nga dual; --Kërkesa nr. 17 zgjidhni to_date("99","RR") "RR", to_date("99","YY") "YY" nga dual;
Të dy kërkesat e mësipërme do të ekzekutohen me sukses dhe do të kthehen datat sipas rregullave të përshkruara në shembullin #1 për kërkesën #3. Pra, vlera e ditës në të gjitha datat e marra do të jetë 01 dhe vlera e muajit do të jetë 09 (nëse e drejtoni pyetjen në shtator). Pyetja kryesore, sa do të jetë vlera e vitit?

Siç mund ta supozoni lehtësisht, në kërkesën nr.16, me “11” nënkuptova vitin 2011 dhe të dyja maskat ma kthyen, d.m.th. rezultati i pyetjes nr. 16 është 01/09/2011 dhe 01/09/2011.

Në kërkesën nr 17, me “99” nënkuptova vitin 1999, dhe këtu mendimet e maskave u ndanë: maska ​​RR ktheu vitin e pritshëm 1999, dhe maska ​​YY ktheu 2099, d.m.th. rezultati i pyetjes nr. 17 është 01/09/1999 dhe 01/09/2099.

Le të shohim se si funksionojnë këta elementë të formatimit në më shumë detaje:
--Kërkesa nr. 18 zgjidhni to_date("00","RR") "00", to_date("49","RR") "49", to_date("50","RR") "50", deri në_date ( "99","RR") "99" nga bashkimi i dyfishtë zgjidhni të gjitha to_date("00","YY") "00", to_date("49","YY") "49", to_date("50" , "YY") "50", to_date("99","YY") "99" nga dual;
Siç shihet nga kërkesa nr. 18, dallimet në funksionimin e maskave fillojnë në vitet '50, d.m.th. Formati YY kthen gjithmonë vitin në shekullin aktual dhe RR kthen gjithmonë vitin<50 воспринимает как год текущего столетия, а год >50 është si një vit i shekullit të kaluar. Në fakt, vlerat to_date("99","RR") = 1999 dhe to_date ("00","RR") = 2000 janë të sakta vetëm nëse data aktuale është më e vogël se 2051, pas së cilës to_date ("99 ","RR" ) = 2099 dhe to_date("00","RR") = 2100. Nëse dëshironi të eksperimentoni, mund të ndryshoni kohën e serverit në 2051 dhe të shihni se si ndryshon rezultati i pyetjes nr. 18, thjesht don Mos e bëni këtë në sistemet që funksionojnë! Nëse koha e serverit ndryshon, data sysdate do të ndryshojë dhe është më mirë të mos mendoni se çfarë lloj dhimbje koke do të keni në të gjitha raportet, tabelat e regjistrave, etj. Rregulla të përgjithshme konvertimi i një viti dyshifror në një vit katërshifror duke përdorur formatin RR duket kështu:
Nëse viti dyshifror i specifikuar është 00 deri në 49, atëherë

  • Nëse dy shifrat e fundit të vitit aktual janë 00 deri në 49, atëherë viti i kthyer ka dy shifrat e para të njëjta me vitin aktual.
  • Nëse dy shifrat e fundit të vitit aktual janë 50 deri në 99, atëherë 2 shifrat e para të vitit të kthyer janë 1 më të mëdha se 2 shifrat e para të vitit aktual.
Nëse viti dyshifror i specifikuar është 50 deri në 99, atëherë
  • Nëse dy shifrat e fundit të vitit aktual janë nga 00 deri në 49, atëherë 2 shifrat e para të vitit të kthyer janë 1 më pak se 2 shifrat e para të vitit aktual.
  • Nëse dy shifrat e fundit të vitit aktual janë 50 deri në 99, atëherë viti i kthyer ka të njëjtat dy shifrat e para si viti aktual.
Ju lutemi vini re se po flas vetëm për rastin e specifikimit të vitit duke përdorur dy shifra; nëse specifikoni vitin me katër shifra, maska ​​YY do të zëvendësohet automatikisht nga maska ​​YYYY dhe maska ​​RR do të zëvendësohet automatikisht me RRRR.
--Kërkesa nr. 19 zgjidhni to_date("1950","RR") "50RR", to_date("1950","YY") "50YY" nga dual;
Prandaj, pyetja #19 do të kthejë 1950 në të dyja rastet.

Shembulli nr. 7. Disa shembuj të tjerë
Për të përfunduar rishikimin, le të shohim pak ekzotike. A do të ketë një gabim si rezultat i ekzekutimit të pyetjes së mëposhtme:
-- Pyetja nr. 20 zgjidhni DATA "1928-12-25" nga dyfishi;
Nëse keni vendosur që kjo është një hyrje e pakuptimtë, atëherë gaboheni - kjo është një caktim plotësisht i saktë i datës në përputhje me standardin ANSI, kërkesa nr. 20 do të ekzekutohet me sukses dhe do të kthehet më 25/12/1928.

Cila nga kërkesat nuk do të plotësohet?
--Kërkesa nr. 21 zgjidhni to_date("1998-JAN-25 17:30","YYYY-MON-DD HH24:MI","NLS_DATE_LANGUAGE=AMERICAN") nga dual; --Kërkesa nr. 21 zgjidh to_date("1998-JAN-25 17:30","YYYY-MON-DD HH24:MI","NLS_DATE_LANGUAGE=RUSSIAN") nga dual;
Ky shembull synon të demonstrojë praninë e një parametri të tretë në funksionin to_date. Ky parametër ju lejon të vendosni vlerën e njërit prej parametrave NLS (National Language Support) vetëm për këtë thirrje në funksionin to_date. Ne shikuam vendosjen e parametrave NLS për një seancë në shembullin nr. 5. Dallimi kryesor midis kërkesave nr. 20 dhe nr. 21 nuk është në emrin e muajit (maska ​​MON zëvendësohet automatikisht nga maska ​​MUAJ, siç përshkruhet në shembullin nr. 5), por në tregues gjuhë të ndryshme datat. Kërkesa nr. 21 pret emrin e muajit në anglisht dhe, në përputhje me rrethanat, nuk do të ekzekutohet, kërkesa nr. 22 pret emrin e muajit në rusisht dhe do të ekzekutohet me sukses.

Kur do të shkaktonte gabime deklarata e tabelës së mëposhtme gjatë futjes së të dhënave?
--Kërkesa nr. 23 krijoni tabelën për_testin (një numër, data b e paracaktuar në_date("09/11/2011"));
Çdo herë që një sesion me formatin e paracaktuar të datës "DD.MON.RR" do të kryejë një insert duke specifikuar vetëm vlerën e insertit të kolonës së parë në vlerat for_test(a) (1); do të ndodhë një gabim.

Karakteristikat e shfaqjes së datave në aplikacione të ndryshme

Çfarë ndikon në shfaqjen e datës
Ky seksion u shtua pasi artikulli u publikua falë rekomandimeve të dhëna në komente. Më poshtë është e vërtetë si për shfaqjen e datave ashtu edhe për shfaqjen e numrave. Është e mundur që kur keni përdorur disa nga shembujt e mësipërm në artikull, keni marrë data në një format të ndryshëm nga ai i treguar në rezultate. Nëse cilësimet e sesionit tuaj përputheshin me ato të treguara në shembuj, atëherë kjo duket e çuditshme, për të thënë të paktën.

E vërteta është se gjatë ekzekutimit të një kërkese
--Kërkesa nr. 24 zgjidhni sysdate nga dual; ju merrni një datë, por për të shfaqur rezultatin në ekran, programi specifik me të cilin hyni në bazën e të dhënave duhet ta konvertojë datën në një varg. Pra, për të shfaqur datat (dhe numrat) në mënyrë implicite thërret to_char, d.m.th. kemi një rast klasik të konvertimit të nënkuptuar (ky konvertim është vetëm për shfaqje, rezultatet e tij nuk marrin pjesë në asnjë llogaritje dhe nuk ndikojnë asgjë përveç shfaqjes së të dhënave). Nëse ka një konvertim të nënkuptuar, atëherë ekziston një maskë me të cilën kryhet. Në rastin klasik, kjo është duhet të jetë maska ​​e vendosur për seancën, d.m.th. maskë e specifikuar në parametrin NLS_DATE_FORMAT të tabelës nls_session_parameters, me të cilën kemi punuar në mënyrë aktive gjatë gjithë artikullit.

Le të kontrollojmë disa aplikacione. Ne do të kontrollojmë duke përdorur skriptin e mëposhtëm:
--Kërkesa nr. 25 --Duke kontrolluar parametrat e parazgjedhur të sesionit, zgjidhni * nga nls_session_parameters ku parametri është në ("NLS_DATE_FORMAT","NLS_DATE_LANGUAGE"); --Dalje datën zgjidhni sysdate nga dyfishtë; --Ndrysho parametrat e parazgjedhur të sesionit alter set sesioni NLS_DATE_FORMAT="DD.MON.RR hh24:mi:ss"; --Dalje datën zgjidhni sysdate nga dyfishtë;
Le të kontrollojmë se çfarë parametrash përdor sqlplus për të shfaqur datat.

Oriz. 1. Rezultati i ekzekutimit të pyetjes nr. 25 në sqlplus.

Siç mund të shihet nga Fig. 1, formati i shfaqjes së datës ndryshon në varësi të cilësimeve të sesionit, d.m.th. sqlplus përdor cilësimet e sesionit. Kjo e bën më të lehtë për të kuptuar procesin e konvertimit të datave në vargje dhe anasjelltas, pasi të njëjtat maska ​​përdoren si për konvertim ashtu edhe për shfaqje.

Disa mjete të avancuara të zhvillimit përdorin cilësimet e tyre NLS që nuk lidhen me cilësimet e Oracle. Si shembull, le të kontrollojmë se cilat parametra përdor PL/SQL Developer për të shfaqur datat. Për ta bërë këtë, le të ekzekutojmë pyetjen nr. 25 në të.


Oriz. 2. Rezultati i ekzekutimit të pyetjes nr. 25 në PL/SQL Developer.

Siç mund të shihet nga Fig. 2, formati i shfaqjes së datës nuk ndryshon kur ndryshohen cilësimet e sesionit. Për më tepër, nëse shikoni nga afër, mund të shihni se si rezultati i parë ashtu edhe i dytë i shfaqjes së datës në ekran nuk korrespondonin me parametrat e sesionit (në rastin e parë, data e shfaqur kishte vitin në një format katërshifror, dhe maska ​​tregonte vitin në një format me dy shifra). Kjo do të thotë që programi përdor cilësimet e veta NLS; në rastin e Zhvilluesit PL/SQL, vendndodhja e tyre tregohet në Fig. 3.


Oriz. 3. Vendosja e parametrave NLS për shfaqjen e datave në PL/SQL Developer.

Si mund të jenë të dëmshme cilësimet e shërbimeve NLS
Shfaqja e një date në një format të ndryshëm nga formati i sesionit është i dëmshëm për një arsye - ai mashtron përdoruesin dhe mund të çojë në gabime. Le të ekzekutojmë pyetjen e mëposhtme në sqlplus dhe PL/SQL Developer:
--Kërkesa nr. 26 --Ndrysho parametrat e parazgjedhur të sesionit alter set sesioni NLS_DATE_FORMAT="DD.MON.RR hh24:mi:ss"; --Dalje datën zgjidhni sysdate nga dyfishtë; --Po përpiqemi t'i konvertojmë të dhënat e marra nga kërkesa e mëparshme në një datë të zgjedhur në_date(ХХХХХХХХ) nga dual; Në rreshtin e fundit të kërkesës, në vend të XXXXXXXXX, do të fusim ato të marra nga rreshti i mëparshëm të dhëna.

Rezultatet e pyetjes janë paraqitur në figurat e mëposhtme.


Oriz. 4. Rezultati i ekzekutimit të pyetjes nr. 26 në sqlplus.


Oriz. 5. Rezultati i ekzekutimit të pyetjes nr. 26 në PL/SQL Developer.

Pse të dhënat e shfaqura në ekran në sqlplus u konvertuan me sukses në një datë, por të dhënat e shfaqura në ekran nga PL/SQL Developer nuk mund të konvertoheshin? Sepse për konvertim, Oracle përdor formatin e të dhënave të specifikuar në seancë dhe të dhënat e nxjerra nga PL/SQL Developer u konvertuan për t'u shfaqur në formatin e vet, të ndryshëm nga formati i sesionit.

konkluzioni

Si përfundim, dua t'ju kujtoj se pothuajse në çdo postim të tij kushtuar punës me datat, Tom Kite flet për nevojën e përdorimit të konvertimeve eksplicite dhe specifikimin e detyrueshëm të një maske. "Kur konvertoni një varg në një datë, kurrë mos u mbështetni në formatin e paracaktuar të datës, gjithmonë vendosni maskën në mënyrë eksplicite" - kjo është ajo që tha ai. Shembuj shtesë dhe gabimet e mundshme kur punoni me konvertimin e datës, mund ta gjeni duke përdorur faqen pyet Tom.

Meqenëse puna me datat përfshiu të gjithë artikullin, shumë prej tyre mbetën "jashtë detit". pyetje interesante, të cilën do të doja ta konsideroja. Me shumë mundësi, pjesa e tretë e artikullit do të shfaqet sapo të kem kohë të lirë.

Në artikullin e mëparshëm, ne shikuam funksionet e integruara për të punuar me vargje. Në këtë artikull do flasim në lidhje me funksionet për të punuar me funksionet e konvertimit të datës/kohës dhe tipit për datat. Për të ruajtur datën dhe kohën, Oracle ofron një lloj të veçantë DATE. Nga pikëpamja fizike, ky është një numër i pjesshëm, pjesa e plotë e të cilit ruan numrin e ditëve që nga një datë bazë, dhe pjesa e pjesshme ruan kohën. Kjo ju lejon të kryeni veprime aritmetike në data - mbledhje dhe zbritje.

Funksioni SYSDATE

Ky është një nga funksionet më të përdorura, ai kthehet data aktuale dhe koha sipas orës së serverit.

Funksioni LAST_DAY(d)

Kthen ditën e fundit të muajit të përcaktuar në datën d.

ZGJIDH SISDATE d,

DITA_E FUNDIT(SYSDATE) d1

Funksioni MONTHS_BETWEEN(d1, d2)

Funksioni MONTH_BETWEEN kthen numrin e muajve midis dy datave d1 dhe d2, duke marrë parasysh shenjën si d1-d2, numri i kthyer është një thyesë.

ZGJIDH MUAJT_BETWEEN("2.09.2006", "2.05.2006") d1,

MONTHS_BETWEEN("12.09.2006", "2.05.2006") d2,

MONTHS_BETWEEN("2.05.2006", "12.09.2006") d3

Le të shqyrtojmë shembuj tipikë- shkurtimi i datës në orë, ditë, muaj dhe vit. Maska e formatit të paracaktuar është "DD"

ZGJEDH SISDATE d1,

TRUNC(SYSDATE, "HH24") d2,

TRUNC(SYSDATE, "DD") d3,

TRUNC(SYSDATE, "MM") d4,

TRUNC(SYSDATE, "YYYY") d5

Formatoni maskat e lejuara për funksionet TRUNC dhe ROUND

Le të hedhim një vështrim më të afërt në maskat e formatit dhe veçoritë e përdorimit të tyre.

Maskë

Qëllimi

Dita e parë e shek

VITI, ose YYYY, ose YY, ose Y

Dita e pare e vitit

Dita e parë e tremujorit

MUAJ, ose HËN, ose MM

Dita e parë e muajit

Të njëjtën ditë të javës me ditën e parë të vitit aktual

Të njëjtën ditë të javës me ditën e parë të muajit aktual

DAY ose DY ose D

Dita e parë e javës

HH, ose HH12, ose HH24

Funksioni TO_DATE(rr[,maskë [,nls_lang]])

Funksioni TO_DATE konverton vargun str në një datë. Konvertimi kryhet duke përdorur maskën e maskës, nëse është e specifikuar. Nëse maska ​​nuk është e specifikuar, atëherë merret maska ​​e paracaktuar. Nëse specifikoni një maskë, mund të specifikoni një parametër më shumë - gjuhën e përdorur kur formatoni emrat e muajve dhe ditëve. Nëse ka një gabim në analizimin e vargut str sipas maskës së specifikuar, ndodh një përjashtim. Gabimi më i zakonshëm është "ORA-01830: Shablloni i formatit të datës përfundon përpara se të konvertohet i gjithë vargu i hyrjes." Për më tepër, shpesh haset gabimi "ORA-01821: formati i datës nuk njihet" - ndodh kur specifikohet një maskë e formatit të pavlefshëm.

SELECT TO_DATE("12.09.2006") d

Formatoni maskat e lejuara për funksionet TO_CHAR kur formatoni datat

Shekulli, me shenjë minus para datave p.e.s.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE-1000000, "SCC") d2

26.09.2006 17:14:21

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "YYYY") d2

Viti, i shkruar me fjalë duke përdorur gjuhën aktuale kombëtare.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "YEAR") d2

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "MM") d2

Emri i muajit me fjalë.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "MUAJ") d2

Java e vitit.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "WW") d2

Dita e vitit.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "DDD") d2

Dita e javës shkruhet me fjalë, nëse është e nevojshme, plotësohet me deri në nëntë karaktere me hapësira.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "DITA") d2

Data e kalendarit Julian. Është numri i ditëve nga 01/01/4712 pes.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "J") d2

Ora e ditës në një shkallë 12-orëshe (1-12).

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "HH") d2

Minutat (0-59).

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "MI") d2

Kjo maskë e formatit është e dobishme për matjen e intervaleve kohore në sekonda.

Shenjat e pikësimit. Ato nxirren në vendet e duhura në datën e formatuar.

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "DD.MM.YYYY HH24.MI") d2,

TO_CHAR(SYSDATE, "DD/MM/YYYY HH12.MI PM") d3

Formatoni elementët e maskës të destinuara për dalje informacion teksti, i ndjeshëm ndaj shkronjave të vogla - rasti kontrollon rastin e tekstit të formatuar. Le të shohim menaxhimin e regjistrave duke përdorur maskën e formatit DAY si shembull:

ZGJEDH SISDATE d1,

TO_CHAR(SYSDATE, "DAY") d2,

TO_CHAR(SYSDATE, "Dita") d3,

TO_CHAR(SYSDATE, "ditë") d4

26.09.2006 17:47:45

Është e lehtë të shihet se nëse maska ​​është e shkruar me shkronja të mëdha, atëherë ajo është e formatuar vlera e tekstit kthehet me shkronja të mëdha. Nëse në pjesën e poshtme, vlera e formatuar do të jetë gjithashtu në atë të poshtme. Dhe së fundi, regjistrimi i maskës me shkronje e madhe bën që teksti i krijuar të formatohet në mënyrë që të fillojë me shkronjë të madhe.

konkluzioni

Në këtë artikull, ne shikuam të gjitha funksionet kryesore të integruara të Oracle të krijuara për të punuar me datat dhe për të kryer operacione të konvertimit të tipit me llojin "datë". Në artikullin vijues, ne do të shikojmë funksionet e konvertimit dhe formatimit të numrave dhe do të kalojmë në pyetje praktike duke përdorur funksionet e diskutuara më parë.

Oracle zbaton një sërë funksionesh për të punuar me vlerat e datës/kohës. Ne nuk do të hyjmë në detaje për të gjitha funksionet, por një përmbledhje në tabelë. 1 do t'ju prezantojë me mundësitë e disponueshme. Nëse ju intereson ndonjë veçori, ju lutemi na kontaktoni. pershkrim i detajuar në drejtori Oracle SQL Referenca.

Shmangni përdorimin tradicional Funksionet e Oracle që trajtojnë vlerat DATE kur punoni me llojet e reja të të dhënave TIMESTAMP. Në vend të kësaj, nëse është e mundur, duhet të përdoren funksionet e reja për llojet INTERVAL. Dhe funksionet DATE duhet të përdoren vetëm për të përpunuar vlerat e tipit DATE.

Shumë nga ato të dhëna në tabelë. 1 funksione (përfshirë ADD_MONTHS) marrin vlera të tipit DATE. Mund të lindin probleme kur përdorni funksione të tilla me llojet e reja të të dhënave TIMESTAMP. Edhe pse secilit prej këtyre funksioneve mund t'i kalojë një vlerë të tipit TIMESTAMP, Oracle do ta konvertojë në mënyrë implicite në llojin DATE përpara se funksioni të përfundojë detyrën e tij, për shembull:

DEKLAROJ TS VULL KOHORE ME ZONË KOHORE; FILLIMI ts:= SYSTIMESTAMP; --Ju lutemi vini re: vlera e ndryshores ts specifikon --sekonda fraksionale DHE zonën kohore. DBMS_OUTPUT.PUT_LINE(ts); --Ndryshimi i vlerës ts të një prej funksioneve të integruara. ts:= DITA_FUNDIT(ts); -- Sekondat e pjesshme HUMBEN dhe zona kohore zevendesohet nga --zona kohore e sesionit. DBMS_OUTPUT.PUT_LINE(ts); FUND;

Rezultati:

Emri Përshkrim
ADD_MUAJ Kthen vlerën DATE që rezulton nga rritja vlera e vendosur DATE për numrin e caktuar të muajve. Shihni Shtimi dhe Zbritja e Intervaleve
CAST Konverton midis llojeve të të dhënave - për shembull, midis DATE dhe kuptime të ndryshme VULL KOHORE. Shih "CAST dhe EKSTRAKT"
CURRENT_DATA Kthen datën dhe orën aktuale në zonën kohore të sesionit si vlerë DATE
CURRENT_TIMESTAMP Kthen datën dhe orën aktuale në zonën kohore të sesionit si vlerë të tipit TIMESTAMP WITH TIME ZONE
ZONA KOHORE DB Rikthen kompensimin e zonës kohore të bazës së të dhënave në lidhje me UTC në formën e një vargu karakteresh (për shembull, "-05:00"). Zona kohore e bazës së të dhënave përdoret vetëm kur punoni me vlera të tipit TIMESTAMP ME ZONË KOHE LOKALE
EKSTRAKT Kthen një vlerë NUMRI ose VARCHAR2 që përmban një element specifik të datës/kohës - shkurtesa e orës, vitit ose zonës kohore. Shih "CAST dhe EKSTRAKT"
FROM_TZ Konverton TIMESTAMP dhe të dhënat e zonës kohore në një vlerë të tipit TIMESTAMP WITH TIME ZONE
DITA E FUNDIT Rikthen ditën e fundit të muajit për vlerën e dhënë të hyrjes DATE
LOCALTIMESTAMP Kthen datën dhe orën aktuale si vlerë TIMESTAMP në zonën lokale kohore
MUAJ_BETWEEN Kthen një vlerë NUMRI që përmban numrin e muajve ndërmjet dy datave. Shihni "Llogaritja e intervalit midis dy vlerave DATE"
NEW_TIME Konverton një vlerë DATE nga një zonë kohore në një vlerë të ngjashme nga një zonë tjetër kohore. Veçoria ekziston për të ruajtur përputhshmërinë me kodin e vjetër; aplikacionet e reja duhet të përdorin STAMP KOHORE ME ZONËN KOHORE ose KOHA ME ZONËN KOHORE LOKALE
DITEN TJETER Rikthen datën e ditës së parë të javës pas datës së specifikuar
NUMTODSINTERVAL Konverton një numër të caktuar ditësh, ore, minutash ose sekondash (zgjedhja juaj) në një vlerë të tipit INTERVAL DAY TO SECOND
NUMTOYMINTERVAL Konverton një numër të caktuar vitesh dhe muajsh (zgjedhja juaj) në një vlerë të tipit INTERVAL VITET NË MUAJ
RRUmbullakët Kthen një vlerë DATE të rrumbullakosur në njësitë e specifikuara
SESION KOHA Rikthen kompensimin e zonës kohore të sesionit (në lidhje me UTC) në formën e një vargu karakteresh
SYS_EXTRACT_UTC Konverton një vlerë të tipit TIMESTAMP WITH TIME ZONE në një vlerë TIMESTAMP me të njëjtën datë dhe orë, të normalizuar nga koha UTC
SYSDATE Kthen datën dhe orën aktuale të serverit Oracle si vlerë DATE
SYSTIMESTAMP Kthen datën dhe orën aktuale të serverit Oracle si vlerë të tipit TIMESTAMP WITH TIME ZONE
TO_CHAR Konverton një vlerë datë/kohë në një varg karakteresh. Shihni "Konvertimi i datës dhe orës"
TO_DATA Konverton një varg karakteresh në një vlerë DATE. Shihni "Konvertimi i datës dhe orës"
TO_DSINTERVAL Konverton një varg karakteresh në një vlerë të tipit INTERVAL DAY TO SECOND . Shih Transformimet e Intervalit
TO_TIMESTAMP Konverton një varg karakteresh në një vlerë TIMESTAMP. Shihni "Konvertimi i datës dhe orës"
TO_TIMESTAMP_TZ Konverton një varg karakteresh në një vlerë të tipit TIMESTAMP WITH TIME ZONE . Shihni "Konvertimi i datës dhe orës"
TO_YMINTERVAL Konverton një varg karakteresh në një vlerë të tipit INTERVAL YEAR TO MONTH . Shih Transformimet e Intervalit
TRUNC Kthen një vlerë DATE të cunguar në njësitë e specifikuara
TZ_OFFSET Kthen zhvendosjen UTC të zonës kohore të specifikuar nga emri ose shkurtesa, në formën VARCHAR2 (për shembull, "-05:00")

Në këtë shembull, ndryshorja ts përmban një vlerë të tipit TIMESTAMP WITH TIME ZONE . Kjo vlerë konvertohet në mënyrë implicite në DATE kur kalohet LAST_DAY. Për shkak se lloji DATE nuk ruan sekonda të pjesshme ose zhvendosje të zonës kohore, këto pjesë të vlerës ts thjesht hidhen. Rezultati i LAST_DAY i caktohet përsëri ts, gjë që bën që të kryhet një konvertim i dytë i nënkuptuar - këtë herë DATE konvertohet në TIMESTAMP ME ZONË KOHE . Konvertimi i dytë merr zonën kohore të sesionit, kështu që ne shohim ?05:00 në kompensimin e zonës kohore që rezulton.

Artikujt më të mirë mbi këtë temë