如何在oracle sql中生成两个日期之间的星期日的所有日期?

时间:2018-11-18 06:31:24

标签: sql oracle

如何在oracle SQL中的两个日期之间生成所有 Sunday 日期?

例如,如果我想要在“ 01/10/2018” “ 31/12/2018” 之间的所有星期日

will be:
07/10/2018
14/10/2018
21/10/2018
...
30/12/2018

我又如何生成2个日期之间的所有日期?

示例:从“ 01/12/2018” “ 31/12/2018”

输出将是:

01/12/2018
02/12/2018
03/12/2018
...
31/12/2018

3 个答案:

答案 0 :(得分:3)

这是怎么回事? CTE(dates)为从2018-10-012018-10-01之间的天数创建一个从2018-12-31开始的所有日期的“日历”。这回答了您的第二个问题。

对于第一个问题,请结合使用TO_CHAR函数和适当的格式掩码(dy)和日期语言(因为如果我不使用它,则会得到克罗地亚名字,因为这是我的默认设置)语言),选择所有星期日。

SQL> with dates as
  2    (select date '2018-10-01' + level - 1 datum
  3     from dual
  4     connect by level <= date '2018-12-31' - date '2018-10-01' + 1
  5    )
  6  select datum
  7  From dates
  8  where to_char(datum, 'dy', 'nls_date_language = english') = 'sun';

DATUM
-----------
07-oct-2018
14-oct-2018
21-oct-2018
28-oct-2018
04-nov-2018
11-nov-2018
18-nov-2018
25-nov-2018
02-dec-2018
09-dec-2018
16-dec-2018
23-dec-2018
30-dec-2018

13 rows selected.

SQL>

答案 1 :(得分:0)

以下查询可以做到。

首先使用connect by子句生成行,每一行的“ level”列的值将增加1 同时获得每个日期的day_of_week 过滤掉day_of_week ='sun'

的记录
PV

对于查询的第二部分,只需在day_of_week上删除过滤器

oc run tmp-pod --image=registry.access.redhat.com/rhel7  -- tail -f /dev/null
oc set volume dc/tmp-pod --add -t pvc --name=new-registry --claim-name=new-registry --mount-path=/mountpath

答案 2 :(得分:0)

select
    to_char(date,'DD-MON-YYYY')
from
    dates
where
    (trunc(date) >= '01/12/2018'
    and
        trunc(date)<= '31/12/2018')
    and
        to_char(date,'DAY') ='SUNDAY';