Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Número de sextas-feiras entre duas datas


Isto irá fazê-lo:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data

Talvez seja melhor se eu quebrar isso. A função NEXT_DAY retorna o próximo dia que é (sexta-feira neste caso) depois a data.

Então, para encontrar a primeira sexta-feira após d1 seria:
next_day( d1, 'FRI')

Mas se d1 for uma sexta-feira que retornaria na sexta-feira seguinte, então ajustamos:
next_day( d1-1, 'FRI')

Da mesma forma, para encontrar a última sexta-feira até e incluindo d2, fazemos:
next_day( d1-7, 'FRI')

Subtraindo o 2 dá um número de dias:0 se forem a mesma data, 7 se tiverem uma semana de intervalo e assim por diante:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI') 

Converter para semanas:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7

Finalmente, se eles são a mesma data, obtemos 0, mas realmente há 1 sexta-feira, e assim por diante, adicionamos um:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1