我从数据库中抽出,我需要去年每个月的第一天。这是针对将每个月运行的报告,因此我不想创建数组,然后每月必须更新该数组。到目前为止,我已将它输出到本月第一天的输出位置:
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
. .
. .
. .
关于我如何能够一直回到2017年5月1日的任何指导,只输出本月的第一天,所以我可以保持我的尺寸,非常感谢。顺便说一句,我在TOAD工作。
答案 0 :(得分:0)
我以不同的方式处理这个问题。如果有人需要帮助,这是解决方案:
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
答案 1 :(得分:0)
这是使用recursive 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