Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Znajdowanie dat między dwiema datami (najlepsza praktyka)

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:

  1. date typ danych zawiera składnik czasu.
  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Wybierz miejsce między dzisiejszą datą

  2. Usuwanie DUŻO danych w Oracle

  3. Jak stworzyć widok w Oracle

  4. Czy Oracle 12 ma problemy z lokalnymi typami kolekcji w SQL?

  5. Wywołanie innej procedury PL/SQL w ramach procedury