sql >> Database teknologi >  >> RDS >> Oracle

Udvælgelse af medarbejdere med fødselsdage inden for et givet område ved hjælp af Oracle SQL

Der er mere end én måde at søge efter datointervaller i Oracle. Til dit scenarie foreslår jeg, at du omsætter måneds- og dagelementerne for alle de involverede datoer til tal.

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

Dette vil ikke bruge noget indeks på e.dateOfBirth kolonne. Hvorvidt det betyder noget, afhænger af, hvor ofte du vil køre forespørgslen.

@AdeelAnsari kommenterer:

Hvilket indeks? Et normalt indeks på dateOfBirth kommer ikke til at være til nogen nytte, fordi indeksposterne vil føre med årstal. Så det hjælper dig ikke med at finde alle optegnelser over personer, der er født på enhver 23. december.

Et funktionsbaseret indeks - eller i 11g, en virtuel kolonne med et indeks (dybest set det samme) - er den eneste måde at indeksere dele af en datokolonne på.



  1. php mysql beregner successive rækker

  2. Perl DBI - kør SQL Script med flere sætninger

  3. binært filindhold vist i php print_r, men ikke gemt i mysql

  4. Vælg dynamiske kolonner i mysql