sql >> Databáze >  >> RDS >> Oracle

Výběr zaměstnanců s narozeninami v daném rozsahu pomocí Oracle SQL

V Oracle existuje více než jeden způsob vyhledávání časových rozsahů. Pro váš scénář navrhuji převést prvky měsíce a dne všech zahrnutých dat na čísla.

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

Toto nepoužije žádný index na e.dateOfBirth sloupec. Zda na tom záleží, závisí na tom, jak často chcete dotaz spouštět.

Komentáře @AdeelAnsari:

Jaký index? Normální index na dateOfBirth nebude k ničemu, protože položky rejstříku povedou s prvkem year. Nepomůže vám tedy najít všechny záznamy o lidech narozených jakýmkoli 23. prosince.

Index založený na funkcích – nebo v 11g, virtuální sloupec s indexem (v podstatě to samé) – je jediným způsobem indexování částí sloupce data.



  1. Vložit velké množství proměnných do tabulky pomocí PDO

  2. Hibernace :Vyberte sloupec obsahující binární data, která by se neměla načítat

  3. Co znamenají tyto možnosti zálohování pouze pro kopírování?

  4. Zkontrolujte, zda existuje databáze (MySQL) a pokud ne, vytvořte ji v PHP