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

Избор на служители с рождени дни в даден диапазон с помощта на Oracle SQL

Има повече от един начин за търсене в диапазони от дати в Oracle. За вашия сценарий предлагам да превърнете елементите на месеца и деня на всички включени дати в числа.

select
  p.id as person_id,
   ...
   ...
  where e.active = 1
  and to_number (to_char( e.dateOfBirth, 'MMDD')) 
      between to_number (to_char( FROMDATE, 'MMDD'))
              and to_number (to_char( TODATE, 'MMDD')) 
  order by extract(month from e.dateOfBirth) DESC,
          extract(day from e.dateOfBirth) DESC

Това няма да използва никакъв индекс на e.dateOfBirth колона. Дали това има значение зависи от това колко често искате да изпълнявате заявката.

Коментари на @AdeelAnsari:

Какъв индекс? Нормален индекс на dateOfBirth няма да е от полза, тъй като записите в индекса ще водят с елемента година. Така че няма да ви помогне да намерите всички записи на хора, родени на някой 23 декември.

Индекс, базиран на функция - или в 11g, виртуална колона с индекс (по същество същото нещо) - е единственият начин за индексиране на части от колона с дата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да потвърдите номера на кредитна карта и да идентифицирате нейния тип с помощта на PL/SQL?

  2. Oracle ORA-00979 - не е израз GROUP BY

  3. Агрегиране на низове в ORACLE 10g с три колони

  4. LISTAGG странно свързване

  5. REGEXP_SUBSTR() Функция в Oracle