【问题标题】:How to recover automatically month in a year如何自动恢复一年中的一个月
【发布时间】:2021-10-15 00:09:44
【问题描述】:

我想得到实际月份,月份-1,月份-2。和当前月份,但少了 1 年

例如,我在我的 where 中这样做了:

      
where  extract(year from date) = 2021 or
extract(month from date) = 06
        orextract(month from date) = 07
      orextract(month from date) = 08

or  (extract(year from date) = 2020 and
    and extract(month from date) = 08)

但我想知道如何自动完成,所以我不需要每个月自己更改。

谢谢

【问题讨论】:

  • 样本数据和预期结果会有所帮助。

标签: sql oracle date


【解决方案1】:

所以 - 您似乎希望在 where 子句中按日期过滤行。 (当然,“date”是保留关键字,所以您的列不能称为“date”;我假设它被称为date_,并带有下划线。)

你可以这样做:

where date_ >= add_months(trunc(sysdate, 'mm'), -14)
      and
      date_ <  add_months(trunc(sysdate, 'mm'), -11)

trunc(sysdate, 'mm') 将当前日期截断到月初。将 -14 个月从 2021 年 8 月 1 日移回 2020 年 6 月 1 日(提前 14 个月)。将 -11 个月移回 2020 年 9 月 1 日;您需要 2020 年 9 月 1 日之前的数据。

【讨论】:

    【解决方案2】:

    您可以过滤到日期是什么时候:

    • 下月初之前以及本月初之前的两个月之前;或
    • 在 11 个月前的月初之前和等于或在 12 个月前的月初之后。

    如果您在 2021 年 8 月运行它,那么您将获得以下所有日期:2021 年 6 月、7 月和 8 月以及 2020 年 8 月。

    像这样:

    WHERE (   date_column <  ADD_MONTHS(TRUNC(SYSDATE, 'MM'),  1)
          AND date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -2) )
    OR    (   date_column <  ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -11)
          AND date_column >= ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -12) )
    

    【讨论】:

    • 非常感谢您的回答,但问题是每个雪花都无法识别函数 trunc
    • @seb 您的问题被标记为“oracle sql date”您的问题或标签中没有提到雪花,所以如果您不告诉我们,我们应该如何知道您正在使用雪花?从(非常)简短的搜索看来,雪花有一个date_trunc function,所以也许你可以使用它;或者您可以适当地标记您的问题,以便了解雪花的主题专家能够看到您想要答案。
    猜你喜欢
    • 2017-08-16
    • 2021-07-05
    • 1970-01-01
    • 2019-09-04
    • 2010-10-01
    • 1970-01-01
    • 2017-04-21
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多