我正在寻找一些SQL来确定当前周是否包含该月的第N天.
例.我想知道我是否在包含本月第三个星期五的那个星期.或者该月的哪个星期包含第三个星期五.周应定义为从星期日开始到星期六结束.因此,从星期六开始的一个月不会在星期五到星期五之前看到,从星期日到星期五开始的一个月,将会在本月的第3周看到它是第3个星期五.
不确定是否需要PL/SQL.
您可以简单地生成包含每月第 N 天的周的日期范围,例如每月的第三个星期五,使用如下查询:
select d - day_of_week AS sunday
,d + (7 - day_of_week) AS saturday
from (select trunc(sysdate,'YY')+rownum-1 AS d
,to_number(to_char(trunc(sysdate,'YY')+rownum-1,'D'))
AS day_of_week
from dual connect by level <= 366)
where to_char(d,'W') = 3
and to_char(d,'DY') = 'FRI';
SUNDAY SATURDAY
========== ==========
14/01/2012 21/01/2012
11/02/2012 18/02/2012
10/03/2012 17/03/2012
14/04/2012 21/04/2012
12/05/2012 19/05/2012
09/06/2012 16/06/2012
14/07/2012 21/07/2012
11/08/2012 18/08/2012
15/09/2012 22/09/2012
13/10/2012 20/10/2012
10/11/2012 17/11/2012
15/12/2012 22/12/2012
Run Code Online (Sandbox Code Playgroud)
编辑:您可以创建一个简单的函数来检查单个日期,例如:
CREATE FUNCTION date_in_week_of_nth_day
(in_date IN DATE
,in_week IN NUMBER
,in_day IN VARCHAR2
) RETURN CHAR IS
ret CHAR(1);
BEGIN
select 'Y' into ret
from (select trunc(in_date,'MM')+rownum-1 AS d
,to_number(to_char(trunc(in_date,'MM')+rownum-1,'D'))
AS day_of_week
from dual connect by level <= 31)
where to_char(d,'W') = in_week
and to_char(d,'DY') = in_day
and :in_date between (d - day_of_week) and (d + (7 - day_of_week));
RETURN ret;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'N';
END;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2925 次 |
| 最近记录: |