4

我有一个包含日期的列以及表中的其他列。我希望能够:

显示与上一年 9 月 1 日到当年 7 月 30 日相匹配的所有行。

我知道一些需要做的事情,只是不确定日期的具体语法。

SELECT * FROM xx
WHERE ASM_DATE BETWEEN TRUNC(SYSDATE-1,'YY') AND TRUNC(SYSDATE,'YY');

这就是我到目前为止所拥有的..

我知道我可以使用 SYSDATE 和 'YYYY' 来获取当前年份,然后为上一年执行 -1,但是我不确定如何指定除此之外的月份。任何帮助都会很棒。

4

3 回答 3

9
SELECT
  *
FROM
  xxx
WHERE
      ASM_DATE >= ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -12)
  AND ASM_DATE <  ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),   1)
于 2012-04-30T13:18:41.613 回答
3

看看oracle ADD_MONTHS 函数。

oracle 参考中有完整的日期时间函数列表。

于 2012-04-30T13:19:37.423 回答
1

比如说,当前月份是April of 2015

上个月的一年数据(从2014 年 2 月 1 日到2015 年 3 月31 日):

SELECT *
FROM xx
WHERE 
ASM_DATE BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -14) 
AND
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1))

包括当月在内的一年数据(从2014 年 3 月 1 日至2015 年 4 月30 日):

SELECT *
FROM xx
WHERE 
ASM_DATE BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -13) 
AND
LAST_DAY(TRUNC(SYSDATE, 'MM'))
于 2015-04-06T05:03:04.303 回答