【问题标题】:Oracle SQL - Select date between month-current year(-1) to month-current yearOracle SQL - 在月份-当前年份(-1)到月份-当前年份之间选择日期
【发布时间】:2012-04-30 13:15:23
【问题描述】:

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

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

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

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

这就是我目前所拥有的......

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

【问题讨论】:

    标签: sql oracle date-arithmetic


    【解决方案1】:
    SELECT
      *
    FROM
      xxx
    WHERE
          ASM_DATE >= ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -12)
      AND ASM_DATE <  ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),   1)
    

    【讨论】:

    • 这个查询很好用,虽然它不是“显示与前一年的 9 月 1 日到今年的 7 月 30 日的日期相匹配的所有行”的答案。
    • 不,但我根据这些就足够了:)
    【解决方案2】:

    看看oracle ADD_MONTHS 函数。

    oracle reference.中有完整的日期时间函数列表

    【讨论】:

      【解决方案3】:

      假设,当前月份是 2015 年 4 月

      上个月的一年数据(从 01-FEB-201431-MAR-2015):

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

      包括当月在内的一年数据(从01-MAR-201430-APR-2015):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 2013-02-15
        • 2015-03-27
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        相关资源
        最近更新 更多