问题描述
达尔·汤姆
我想生成日期范围并根据工作日插入到表中。
示例: 我有30-09-2017的日期范围01-09-2017,我想选择的工作日是星期一,星期三
下面的事情我想生成:
04-09-2017
06-09-2017
11-09-2017
13-09-2017
18-09-2017
20-09-2017
25-09-2017
27-09-2017
请在这方面尽快需要您的帮助。
谢谢。
我想生成日期范围并根据工作日插入到表中。
示例: 我有30-09-2017的日期范围01-09-2017,我想选择的工作日是星期一,星期三
下面的事情我想生成:
04-09-2017
06-09-2017
11-09-2017
13-09-2017
18-09-2017
20-09-2017
25-09-2017
27-09-2017
请在这方面尽快需要您的帮助。
谢谢。
专家解答
我们可以使用一个简单的connect-by来生成所有的日子,然后添加一个WHERE子句来限制它只是感兴趣的日子
SQL> with params as
2 (
3 select
4 date '2017-09-01' sdate,
5 date '2017-09-30' edate
6 from dual
7 )
8 select sdate+rownum-1
9 from params
10 connect by level <= edate - sdate + 1;
SDATE+ROW
---------
01-SEP-17
02-SEP-17
03-SEP-17
04-SEP-17
05-SEP-17
06-SEP-17
07-SEP-17
08-SEP-17
09-SEP-17
10-SEP-17
11-SEP-17
12-SEP-17
13-SEP-17
14-SEP-17
15-SEP-17
16-SEP-17
17-SEP-17
18-SEP-17
19-SEP-17
20-SEP-17
21-SEP-17
22-SEP-17
23-SEP-17
24-SEP-17
25-SEP-17
26-SEP-17
27-SEP-17
28-SEP-17
29-SEP-17
30-SEP-17
30 rows selected.
SQL>
SQL>
SQL>
SQL>
SQL> with params as
2 (
3 select
4 date '2017-09-01' sdate,
5 date '2017-09-30' edate
6 from dual
7 )
8 select *
9 from (
10 select sdate+rownum-1 the_day
11 from params
12 connect by level <= edate - sdate + 1
13 )
14 where to_char(the_day,'DY') in ('MON','WED');
THE_DAY
---------
04-SEP-17
06-SEP-17
11-SEP-17
13-SEP-17
18-SEP-17
20-SEP-17
25-SEP-17
27-SEP-17
8 rows selected.
SQL>
SQL>
SQL>
SQL>
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




