Pytasz o najlepsze praktyki. Myślę, że najlepszą praktyką jest:
"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1
Najpierw zwróć uwagę na użycie DATE
słowo kluczowe. Twoje pytanie dotyczy dat a mimo to używasz formatu daty, którego Oracle nie obsługuje bezpośrednio. Na szczęście Oracle obsługuje standard ANSI DATE
słowo kluczowe w standardowym formacie ISO.
Po drugie dodałem +1
więc możesz zobaczyć koniec okresu, który prawdopodobnie jest tym, co chcesz zobaczyć w kodzie. Nie powinno to wpływać na wydajność, ponieważ + 1
jest na stałym poziomie.
Po trzecie, stała daty ma składnik czasu. Jeśli nie określono żadnego, jest północ w dniu. Tak więc wyrażenie:
"Date" BETWEEN '2014-04-11' AND '2014-04-12'
Czy naprawdę:
"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'
Oznacza to, że uwzględniono dokładnie jeden czas od późniejszej daty, pierwszą chwilę o północy. Zwykle nie tego chcesz. Oracle pogarsza ten problem na dwa sposoby:
date
typ danych zawiera składnik czasu.- Domyślny sposób prezentowania
date
wartości nie mają składnika czasowego.
Aby być najbezpieczniejszym, stosuj następujące zasady:
- Nie używaj
between
na randki. - Użyj
>=
na pierwszą randkę. - Użytkownik
<
na drugi.
Aaron Bertrand ma blogu
na dokładnie ten temat. Chociaż chodzi konkretnie o SQL Server, wiele pomysłów dotyczy Oracle — zwłaszcza, że date
typ danych w Oracle zawiera czasy.