Žádáte o osvědčené postupy. Myslím, že následující je nejlepší postup:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Nejprve si povšimněte použití DATE klíčové slovo. Vaše otázka se týká dat a přesto používáte formát data, který Oracle přímo nepodporuje. Oracle naštěstí podporuje standard ANSI DATE klíčové slovo ve standardním formátu ISO.
Za druhé jsem přidal +1 takže můžete vidět konec časového období, což je pravděpodobně to, co chcete vidět v kódu. Nemělo by to mít vliv na výkon, protože + 1 je konstantní.
Za třetí, datová konstanta má časovou složku. Není-li zadána žádná, je v den půlnoc. Takže výraz:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
Je opravdu:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
To znamená, že je zahrnut přesně jeden čas z pozdějšího data, první okamžik o půlnoci. To obvykle není to, co chcete. Oracle tento problém zhoršuje dvěma způsoby:
datedatový typ zahrnuje časovou složku.- Výchozí způsob prezentace
datehodnoty nemají žádnou časovou složku.
Abyste byli v bezpečí, použijte následující pravidla:
- Nepoužívejte
betweenna datech. - Použijte
>=na první rande. - Uživatel
<za druhé.
Aaron Bertrand má blog
přesně na toto téma. Ačkoli se jedná konkrétně o SQL Server, mnoho myšlenek platí pro Oracle - zejména proto, že date datový typ v Oracle zahrnuje časy.