Oracle
 sql >> база данни >  >> RDS >> Oracle

Намиране на дати между две дати (Най-добра практика)

Вие питате за най-добри практики. Мисля, че следното е най-добрата практика:

"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 влошава този проблем по два начина:

  1. date типът данни включва времеви компонент.
  2. Начинът по подразбиране за представяне на date стойности няма времеви компонент.

Така че, за да сте най-безопасни, използвайте следните правила:

  • Не използвайте between на дати.
  • Използвайте >= за първата среща.
  • Потребител < за второто.

Арън Бертран има блог точно по тази тема. Въпреки че става дума конкретно за SQL Server, много от идеите се отнасят за Oracle -- особено защото date типът данни в Oracle включва времена.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените ограничението

  2. Oracle - присъединяване към актуализиране - таблица без ключ

  3. Преминете през предварително зададени стойности

  4. Намерете диапазони от поредица от числа в SQL/Oracle

  5. Внедряване на уебсайт на ASP.NET с ODP.NET