Вие питате за най-добри практики. Мисля, че следното е най-добрата практика:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Първо, обърнете внимание на използването на DATE
ключова дума. Вашият въпрос е за датите и въпреки това използвате формат за дата, който Oracle не поддържа директно. За щастие, Oracle поддържа стандарта ANSI DATE
ключова дума със стандартния ISO формат.
Второ, добавих +1
така че можете да видите края на периода от време, което вероятно е това, което искате да видите в кода. Това не би трябвало да повлияе на производителността, тъй като + 1
е на константа.
Трето, константата за дата има времеви компонент. Когато не е посочено, е полунощ на датата. И така, изразът:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
Наистина е:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
Тоест, включен е точно един момент от по-късната дата, първият момент в полунощ. Това обикновено не е това, което искате. Oracle влошава този проблем по два начина:
date
типът данни включва времеви компонент.- Начинът по подразбиране за представяне на
date
стойности няма времеви компонент.
Така че, за да сте най-безопасни, използвайте следните правила:
- Не използвайте
between
на дати. - Използвайте
>=
за първата среща. - Потребител
<
за второто.
Арън Бертран има блог
точно по тази тема. Въпреки че става дума конкретно за SQL Server, много от идеите се отнасят за Oracle -- особено защото date
типът данни в Oracle включва времена.