sql >> Database >  >> RDS >> Oracle

Selecteren van werknemers met verjaardagen binnen een bepaald bereik met Oracle SQL

Er is meer dan één manier om datumbereiken te zoeken in Oracle. Voor je scenario raad ik je aan om de maand- en dagelementen van alle betrokken datums om te zetten in getallen.

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

Dit gebruikt geen index op de e.dateOfBirth kolom. Of dat uitmaakt, hangt af van hoe vaak u de query wilt uitvoeren.

@AdeelAnsari opmerkingen:

Welke index? Een normale index op dateOfBirth zal van geen enkel nut zijn, omdat de indexvermeldingen zullen leiden met het jaarelement. Het zal je dus niet helpen om alle gegevens te vinden van mensen die geboren zijn op elke 23 dec.

Een functiegebaseerde index - of in 11g, een virtuele kolom met een index (in principe hetzelfde) - is de enige manier om delen van een datumkolom te indexeren.



  1. back-up van mysql-database met mysqldump

  2. Is er een geheugenlimiet voor de json_encode()-methode?

  3. Jij bent het niet, ik ben het (I/O-probleemoplossing)

  4. Doe mee aan een telquery op generation_series() en haal null-waarden op als '0'