Jeg har altid bare brugt en streng på formen yyyymmdd når jeg skulle sammenligne dato'er i Oracle, i stedet for to_date('20080401', 'yyyymmdd'). Men er det sikkert? Vil det altid virke?
Det kommer an på værdien af NLS_DATE_FORMAT. Denne parameter fastlægger standarddatoformatet og så længe NLS_DATE_FORMAT stemmer overens med det format du anvender i dine strenge, burde det virke idet Oracle konverterer din streng til en dato under anvendelse af formatet i NLS_DATE_FORMAT.
Men det sikreste er at teste med TO_CHAR, eller som det hedder i dokumentationen: "Oracle recommends that you specify explicit conversions"
Synes godt om
Slettet bruger
01. april 2008 - 23:36#2
Hvis du skal arbejde med dato uden tid (kl. 00:00) kan du bruge en kortere notation.
I stedet for
select * from users where birth > to_date('20080401', 'RRRRMMDD')
kan du skrive
select * from users where birth > DATE '2008-04-01'
Det er lidt kortere, fordi du ikke skal skrive det forventede format. Det er altid på formen 'YYYY-MM-DD'.
Hvad sker der forresten, når du skriver
select * from users where birth > '20080401'?
Er birth et dato-felt? Konverteres birth så til et tekst-felt, der sammenlignes med teksten '20080401', eller konverteres '20080401' til en dato? Det har betydning, fordi det jo vil være nemmere en gang for alle at konveretere '20080401' til en dato fremfor at konvertere alle birth-felter i rækkerne i tabellen users til en stren.
Ja, jeg har aldrig haft problemer med at den laver en streng sammenligning i stedet for en dato sammenligning. Jeg tror ikke engang at vores NLS_DATE_FORMAT er sat til yyyymmdd.
Er der nogen der tør sige at følgende altid vil virke?
select * from users where birth > '20080401'
Synes godt om
Slettet bruger
24. april 2008 - 08:32#6
Ja! Jeg tør godt sige at det kun vil virke hvis NLS_LANG etc. er under kontrol. Og du vil altid risikere at der sker noget uventet. Hvis fx database flyttes til ny server med andre regional settings eller hvis dit statement bliver udført fra en session på en anden maskine end ellers. Du bør altid skrive enten to_char('20080401', 'YYYYMMDD') eller DATE '2008-04-01'.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.