Oracle
 sql >> Base de données >  >> RDS >> Oracle

Nombre de vendredis entre deux dates

Cela le fera :

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

Peut-être mieux si je décompose ça. La fonction NEXT_DAY renvoie le jour suivant qui est un (vendredi dans ce cas) après la date.

Donc, pour trouver le premier vendredi après d1, ce serait :

next_day( d1, 'FRI')

Mais si d1 est un vendredi qui reviendrait le vendredi suivant, alors on ajuste :

next_day( d1-1, 'FRI')

De même, pour trouver le dernier vendredi jusqu'au d2 inclus, nous faisons :

next_day( d1-7, 'FRI')

Soustraire les 2 donne un nombre de jours :0 s'ils sont à la même date, 7 s'ils sont à une semaine d'intervalle et ainsi de suite :

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

Convertir en semaines :

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

Enfin, s'ils sont à la même date on obtient 0, mais en réalité il y a 1 vendredi, et ainsi de suite donc on en ajoute un :

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