Ton*_*ews 12
这样做:
select ((next_day(date2-7,'FRI')-next_day(date-1,'FRI'))/7)+1 as num_fridays
from data
Run Code Online (Sandbox Code Playgroud)
如果我打破它,也许是最好的.NEXT_DAY函数返回日期之后的第二天(在本例中为星期五).
因此,在d1之后找到第一个星期五将是:
next_day( d1, 'FRI')
Run Code Online (Sandbox Code Playgroud)
但如果d1是星期五将在下周五返回,那么我们调整:
next_day( d1-1, 'FRI')
Run Code Online (Sandbox Code Playgroud)
类似于找到上周五直到并包括d2我们做:
next_day( d1-7, 'FRI')
Run Code Online (Sandbox Code Playgroud)
减去2给出了若干天:如果它们是相同的日期则为0,如果它们相隔一周则为7,依此类推:
next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')
Run Code Online (Sandbox Code Playgroud)
转换为周:
(next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7
Run Code Online (Sandbox Code Playgroud)
最后,如果它们是相同的日期,我们得到0,但实际上有1个星期五,依此类推,所以我们添加一个:
((next_day( d1-7, 'FRI') - next_day( d1-1, 'FRI')) / 7) + 1
Run Code Online (Sandbox Code Playgroud)
我必须投入两美分才能使用日历表.(这是一种强迫.)
select count(*) as num_fridays
from calendar
where day_of_week = 'Fri'
and cal_date between '2011-01-01' and '2011-02-17';
num_fridays
-----------
6
Run Code Online (Sandbox Code Playgroud)
死简单易懂.利用索引.
也许我应该开始一个12人组.日历表匿名.