sql >> Base de Datos >  >> RDS >> Oracle

Seleccionar empleados con cumpleaños en un rango dado usando Oracle SQL

Hay más de una forma de buscar rangos de fechas en Oracle. Para su escenario, le sugiero que convierta los elementos de mes y día de todas las fechas involucradas en números.

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

Esto no usará ningún índice en el e.dateOfBirth columna. Si eso importa depende de la frecuencia con la que desee ejecutar la consulta.

@AdeelAnsari comenta:

¿Qué índice? Un índice normal en dateOfBirth no va a ser de ninguna utilidad, porque las entradas del índice llevarán el elemento del año. Por lo tanto, no le ayudará a encontrar todos los registros de personas nacidas en cualquier 23 de diciembre.

Un índice basado en funciones, o en 11g, una columna virtual con un índice (básicamente lo mismo), es la única forma de indexar partes de una columna de fecha.