两个日期之间的星期五数量

ssa*_*ahu 8 sql oracle select date

如何使用oracle sql中的select语句找到两个日期(包括两个日期)之间的周五数?

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)

  • +1,但请注意next_day()函数依赖于NLS参数并更好地使用众所周知的星期五日期来获取字符串常量而不是'FRI'字符串:to_char(to_date('20110211','yyyymmdd'),'day') (4认同)

Mik*_*ll' 6

我必须投入两美分才能使用日历表.(这是一种强迫.)

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人组.日历表匿名.