To zrobi to:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Może najlepiej, jeśli to rozwiążę. Funkcja NEXT_DAY zwraca następny dzień, czyli (w tym przypadku piątek) po data.
Zatem znalezienie pierwszego piątku po d1 to:
next_day( d1, 'FRI')
Ale jeśli d1 to piątek, który zwróci następny piątek, więc dostosowujemy:
next_day( d1-1, 'FRI')
Podobnie, aby znaleźć ostatni piątek do d2 włącznie, robimy:
next_day( d1-7, 'FRI')
Odjęcie 2 daje liczbę dni:0, jeśli są to ta sama data, 7, jeśli dzielą je tydzień i tak dalej:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Konwertuj na tygodnie:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Wreszcie, jeśli są w tej samej dacie, otrzymujemy 0, ale tak naprawdę jest 1 piątek i tak dalej, więc dodajemy jeden:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1