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

Wyselekcjonowanie pracowników z urodzinami w danym zakresie za pomocą Oracle SQL

W Oracle istnieje więcej niż jeden sposób wyszukiwania zakresów dat. W swoim scenariuszu sugeruję, abyś zamienił elementy miesiąca i dnia wszystkich dat na liczby.

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

Nie użyje to żadnego indeksu w e.dateOfBirth kolumna. To, czy ma to znaczenie, zależy od tego, jak często chcesz uruchamiać zapytanie.

@AdeelAnsari komentarze:

Jaki indeks? Normalny indeks w dniu dateOfBirth na nic się nie przyda, ponieważ pozycje indeksu będą prowadzić z elementem year. Nie pomoże Ci więc znaleźć wszystkich danych osób urodzonych w dowolnym 23 grudnia.

Indeks oparty na funkcjach - lub w 11g, wirtualna kolumna z indeksem (w zasadzie to samo) - jest jedynym sposobem indeksowania części kolumny daty.



  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 automatycznie zmienia nazwy kolumn z wybierz?

  2. przekroczyć limit 32k podczas wstawiania parametru Oracle clob IN za pomocą sprężyny StoredProcedure

  3. Czy dbms_output.put() jest buforowany inaczej niż dbms_output.put_line()?

  4. Rozproszone bazy danych Oracle i MSVC

  5. Domyślna kolejność wierszy dla zapytania select w Oracle