【问题标题】:Return data with date from 2 months ago (using Oracle SQL)返回日期为 2 个月前的数据(使用 Oracle SQL)
【发布时间】:2020-02-24 17:20:00
【问题描述】:

我想知道是否有人可以解决这个问题。 我正在尝试返回 Worker 的终止日期在 2 个月前的月份的结果,因此如果报告在 10 月运行,我希望看到终止日期在 8 月的人。

目前我能想到的最好的是

其中月(saw_4) = 月(SYSDATE)-2

但这不适用于 1 月和 2 月的 SYSDATE。 (另外它似乎不想在 Oracle OTBI 上运行,所以我认为我会在 BI 中运行)

SELECT "Worker"."Person Number" AS saw_0, 
"Worker"."Employee Last Name" AS saw_1, 
"Worker"."Employee First Name" AS saw_2, 
"Worker"."Primary National Identifier Number" AS saw_3, 
"Worker"."Termination Date" AS saw_4 
FROM "Workforce Management - Work Relationship Real Time" 
Where Month(saw_4) = month(SYSDATE)-2

感谢您的任何帮助。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    可能是这样的:

    where termination_date between trunc(add_months(sysdate, -2), 'mm')
                               and last_day(add_months(sysdate, -2))
    

    为什么,如果有更简单的

    where to_char(termination_date, 'yyyymm') = to_char(add_months(sysdate, -2), 'yyyymm')
    

    因为这会导致termination_date 上的可能索引无法使用(除非您有基于函数的索引,而人们通常没有)。

    【讨论】:

      【解决方案2】:

      我倾向于这样写:

      where termination_date >= trunc(add_months(sysdate, -2), 'mm') and
            termination_date < trunc(add_months(sysdate, -1), 'mm') 
      

      大概termination_date 没有时间组件。但是,唉,在 Oracle 中,date 数据类型总是有一个。因此,作为一般解决方案,这似乎更安全。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-17
        • 2012-05-22
        • 1970-01-01
        • 2016-11-14
        • 2018-06-21
        • 1970-01-01
        • 2020-01-03
        相关资源
        最近更新 更多