【问题标题】:Show all jobs from 1st April to end of previous month显示从 4 月 1 日到上月底的所有职位
【发布时间】:2020-05-25 14:49:12
【问题描述】:

我希望设置一些报告来显示财政年度 - 上个月末的信息,但我在尝试设置日期过滤器时遇到了问题。 例如,如果我现在运行报告,它将显示系统上从 2019 年 4 月 1 日到 2020 年 1 月 31 日的所有工作。

我得到的虚拟代码是:

select
job.job_number,
job.job_logged_date,
job.actual_comp_date,
job.job_type

from
job

where

这只是我遇到问题的 WHERE 部分。

我知道前几个月我可以使用

where job.actual_comp_date >= trunc(trunc(SYSDATE,'MM')-1,'MM') AND job.actual_comp_date <=trunc(SYSDATE,'MM') 

但我不记得如何将其更改为从特定日期(例如 2019 年 4 月 1 日)到上个月月底。

【问题讨论】:

    标签: sql oracle date range


    【解决方案1】:

    试试:

    where job.actual_comp_date > to_date('01-04-2019 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
    and job.actual_comp_date < to_date('31-01-2020 23:59:59', 'DD-MM-YYYY HH24:MI:SS')
    

    如果您希望日期是上个月的最后一天,您可以尝试:

    where job.actual_comp_date > to_date('01-04-2019 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 
    and job.actual_comp_date < last_day(add_months(sysdate,-1))
    

    【讨论】:

    • 感谢您的支持 - 但我一直在寻找一些代码,我不必在每个月底进入并更改结束日期。
    • 您可以按照其他答案的建议检查编辑。
    【解决方案2】:

    你可以试试下面

    where job.actual_comp_date >= to_date('2019-12-30','yyyy-mm-dd') AND job.actual_comp_date <=LAST_DAY(ADD_MONTHS(sysdate, -1)) 
    

    【讨论】:

      【解决方案3】:

      您可以使用以下逻辑:

      where job.actual_comp_date >= trunc(trunc(sysdate) - interval '3' month, 'year') 
                                            + interval '3' month
      AND job.actual_comp_date < trunc(trunc(sysdate) - interval '3' month, 'year') 
                                            + interval '15' month ;
      

      干杯!!

      【讨论】:

        【解决方案4】:

        我想你只是想要trunc():

        where job.actual_comp_date < trunc(SYSDATE, 'MON') and
              job.actual_comp_date >= date '2019-04-01' 
        

        如果您希望当前会计年度基于当前日期,则:

        where job.actual_comp_date < trunc(SYSDATE, 'MON') and
              job.actual_comp_date >= add_months(trunc(add_months(sysdate, -3), 'YYYY'), 3)
        

        【讨论】:

          【解决方案5】:

          还有

          WITH da(date_h) AS (
          SELECT '2019-12-30'  date_h FROM dual union all
          SELECT '2018-12-30'  date_h FROM dual union all
          SELECT '2020-02-20'  date_h FROM dual union all
          SELECT '2019-08-30'  date_h FROM dual  
          )
          SELECT date_h FROM da WHERE 
          to_date(date_h, 'yyyy-mm-dd') >= to_date('2019-04-01','yyyy-mm-dd') 
          AND 
          to_date(date_h, 'yyyy-mm-dd') <= LAST_DAY(ADD_MONTHS(sysdate, -1)) --to_date('2020-01-31','yyyy-mm-dd') 
          

          db <> fiddle

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-04-06
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多