Dette vil gøre det:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Måske bedst, hvis jeg deler det ned. Funktionen NEXT_DAY returnerer den næste dag, som er en (fredag i dette tilfælde) efter datoen.
Så at finde den første fredag efter d1 ville være:
next_day( d1, 'FRI')
Men hvis d1 er en fredag, ville det vende tilbage den følgende fredag, så vi justerer:
next_day( d1-1, 'FRI')
På samme måde for at finde den sidste fredag til og med d2 gør vi:
next_day( d1-7, 'FRI')
At trække de 2 fra giver et antal dage:0 hvis de er samme dato, 7 hvis de er en uges mellemrum og så videre:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Konverter til uger:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Til sidst, hvis de er den samme dato, får vi 0, men i virkeligheden er der 1 fredag, og så videre, så vi tilføjer en:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1