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

Número de viernes entre dos fechas

Esto lo hará:

select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data

Tal vez sea mejor si analizo eso. La función NEXT_DAY devuelve el día siguiente que es un (viernes en este caso) después la fecha.

Entonces, para encontrar el primer viernes después de d1 sería:

next_day( d1, 'FRI')

Pero si d1 es un viernes, regresaría el viernes siguiente, entonces ajustamos:

next_day( d1-1, 'FRI')

De manera similar, para encontrar el último viernes hasta e incluyendo d2, hacemos:

next_day( d1-7, 'FRI')

Restando el 2 da un número de días:0 si son la misma fecha, 7 si están separados por una semana y así sucesivamente:

next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI') 

Convertir a semanas:

(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7

Finalmente, si son la misma fecha, obtenemos 0, pero realmente hay 1 viernes, y así sucesivamente, agregamos uno:

((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1