我正在从数据库中提取,我需要去年每个月第一天。这是针对每月运行的报告,因此我不想创建一个数组,然后必须每月更新该数组。到目前为止,我已经把它输出到本月第一天的位置:
SELECT
SCART.STA_FRAME_STAT.ARRAY,
SCART.STA_FRAME_STAT.S_DATE
FROM
SCART.STA_FRAME_STAT
WHERE
(SCART.STA_FRAME_STAT.S_DATE) = (trunc(sysdate) - (to_number(to_char(sysdate,'DD')) -1 ))
其中,其输出显示:
Array S_DATE
1 5/1/2018
2 5/1/2018
. .
. .
. .
关于我如何将其一直追溯到5/1/2017而仅输出本月的第一天的任何指导,以便我可以保持我的尺寸,将不胜感激。顺便说一下,我在蟾蜍工作。
我以不同的方式处理这个问题。如果有人需要帮助,这是解决方案:
SELECT
SCART.STA_FRAME_STAT.ARRAY,
SCART.STA_FRAME_STAT.S_DATE
FROM
SCART.STA_FRAME_STAT
WHERE
to_char(SCART.STA_FRAME_STAT.S_DATE,'DD') = 01
AND
to_char(SCART.STA_FRAME_STAT.S_DATE,'YYYY') >= 2017
这是一种使用递归 with 子句的方法。这将生成从当前月份起 12 个月的每个月的第一天。
with dates(r) as
(select 0 r from dual
union all
select r+1 from dates
where r < 12)
select r,
trunc(add_months(sysdate,-1*r), 'MM') S_DATE
from dates
我的输出是:
r S_DATE
0 01-MAY-18
1 01-APR-18
2 01-MAR-18
3 01-FEB-18
4 01-JAN-18
5 01-DEC-17
6 01-NOV-17
7 01-OCT-17
8 01-SEP-17
9 01-AUG-17
10 01-JUL-17
11 01-JUN-17
12 01-MAY-17