Du beder om bedste praksis. Jeg tror, at følgende er den bedste praksis:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Bemærk først brugen af DATE søgeord. Dit spørgsmål handler om datoer og alligevel bruger du et datoformat, som Oracle ikke direkte understøtter. Heldigvis understøtter Oracle ANSI-standarden DATE søgeord med ISO-standardformatet.
For det andet tilføjede jeg en +1 så du kan se slutningen af tidsperioden, hvilket formentlig er det, du vil se i koden. Det bør ikke påvirke ydeevnen, fordi + 1 er på en konstant.
For det tredje har en datokonstant en tidskomponent. Når ingen er angivet, er det midnat på datoen. Så udtrykket:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
Er virkelig:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
Det vil sige, at præcis én gang fra den senere dato er inkluderet, det første øjeblik ved midnat. Det er normalt ikke det, du ønsker. Oracle gør dette problem værre på to måder:
datedatatypen inkluderer en tidskomponent.- Standardmåden at præsentere
datepå værdier har ingen tidskomponent.
Så for at være sikrest, brug følgende regler:
- Brug ikke
betweenpå datoer. - Brug
>=til den første date. - Bruger
<for det andet.
Aaron Bertrand har en blog
om netop dette emne. Selvom det specifikt handler om SQL Server, gælder mange af ideerne for Oracle -- især fordi date datatypen i Oracle inkluderer tider.