sql >> Databasteknik >  >> RDS >> Oracle

Välja anställda med födelsedagar inom ett visst intervall med Oracle SQL

Det finns mer än ett sätt att söka efter datumintervall i Oracle. För ditt scenario föreslår jag att du omvandlar månads- och dagelementen för alla inblandade datum till siffror.

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

Detta kommer inte att använda något index på e.dateOfBirth kolumn. Om det spelar någon roll beror på hur ofta du vill köra frågan.

@AdeelAnsari kommenterar:

Vilket index? Ett normalt index på dateOfBirth kommer inte att vara till någon nytta, eftersom indexposterna kommer att leda med årselementet. Så det hjälper dig inte att hitta alla register över personer födda på någon 23:e december.

Ett funktionsbaserat index - eller i 11g, en virtuell kolumn med ett index (i princip samma sak) - är det enda sättet att indexera delar av en datumkolumn.



  1. Söker du efter NULL på en samling i JPQL-frågor?

  2. On-Premises vs. SaaS:Databas Monitoring System Architecture

  3. Python-Sqlalchemy binär kolumn Typ HEX() och UNHEX()

  4. Så här ser du innehållet i Check Constraint på Oracle