Dies wird es tun:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Vielleicht am besten, wenn ich das aufschlüssele. Die NEXT_DAY-Funktion gibt den nächsten Tag zurück, der (in diesem Fall Freitag) nach ist das Datum.
Den ersten Freitag nach d1 zu finden wäre also:
next_day( d1, 'FRI')
Aber wenn d1 ein Freitag ist, der den folgenden Freitag zurückgeben würde, passen wir an:
next_day( d1-1, 'FRI')
Um den letzten Freitag bis einschließlich d2 zu finden, gehen wir ähnlich vor:
next_day( d1-7, 'FRI')
Das Subtrahieren der 2 ergibt eine Anzahl von Tagen:0, wenn es sich um dasselbe Datum handelt, 7, wenn sie eine Woche auseinanderliegen, und so weiter:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
In Wochen umrechnen:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Schließlich, wenn sie das gleiche Datum haben, erhalten wir 0, aber wirklich gibt es 1 Freitag, und so weiter, also fügen wir eins hinzu:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1