Това ще го направи:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Може би най-добре е да го разбия. Функцията NEXT_DAY връща следващия ден, който е (петък в този случай) след датата.
Така че да намерите първия петък след d1 би било:
next_day( d1, 'FRI')
Но ако d1 е петък, това ще се върне следващия петък, така че ние коригираме:
next_day( d1-1, 'FRI')
По същия начин, за да намерим последния петък до d2 включително, правим:
next_day( d1-7, 'FRI')
Изваждането на 2 дава брой дни:0, ако са на една и съща дата, 7, ако са с една седмица разлика и така нататък:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Преобразуване в седмици:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
И накрая, ако са на една и съща дата, получаваме 0, но наистина има 1 петък и така нататък, така че добавяме едно:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1