Oracle
 sql >> Database >  >> RDS >> Oracle

Numero di venerdì tra due date

Questo lo farà:

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

Forse è meglio se lo abbatto. La funzione NEXT_DAY restituisce il giorno successivo che è un (venerdì in questo caso) dopo la data.

Quindi per trovare il primo venerdì dopo d1 sarebbe:

next_day( d1, 'FRI')

Ma se d1 è un venerdì che ritornerebbe il venerdì successivo, quindi aggiustiamo:

next_day( d1-1, 'FRI')

Allo stesso modo, per trovare l'ultimo venerdì fino a d2 incluso, facciamo:

next_day( d1-7, 'FRI')

Sottraendo il 2 si ottiene un numero di giorni:0 se sono la stessa data, 7 se sono a distanza di una settimana e così via:

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

Converti in settimane:

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

Infine, se sono la stessa data otteniamo 0, ma in realtà c'è 1 venerdì, e così via ne aggiungiamo uno:

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