暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 生成日期范围取决于周天数

askTom 2017-09-07
445

问题描述

达尔·汤姆

我想生成日期范围并根据工作日插入到表中。

示例: 我有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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论