【问题标题】:query to get last years data missing dec data查询以获取缺少 dec 数据的去年数据
【发布时间】:2020-08-14 08:15:02
【问题描述】:

我有一个查询来获取往年的数据,例如

vsqlstr := 'select name, enrollement_dt,case_name, dept, city, state, zip from enrollement where ';
    vsqlstr :=vsqlstr ||' enrollement_dt <= to_date(''12''||(EXTRACT(YEAR FROM SYSDATE)-1), ''MMYYYY'')  ';

DB 已经跟风了。记录:

Name Enrollement_Dt Case_name dept city state zip
ABS  2019-AUG-16    TGH       ENG   NY   NY    46378   
BCD  2019-DEC-31    THG       SCI   VA   VA    76534
EFG  2019-DEC-31    TGY       HIS   WA   WA    96534 
HIJ  2019-DEC-31    YUI       MATH  PA   PA    56534
KLM  2020-JAN-12    RET       MATH  TN   TN    56453

上述查询返回第一条注册日期为“2019-AUG-16”的记录,但不返回其他记录。我想获取 2019 年的所有记录。

【问题讨论】:

    标签: java sql oracle oracle11g


    【解决方案1】:

    你的问题是

    to_date('12'||(EXTRACT(YEAR FROM SYSDATE)-1), 'MMYYYY')
    

    在您需要 2019-12-31 时返回(截至 2020 年)2019-12-01。您也可以通过指定日期来解决这个问题:

    to_date('3112'||(EXTRACT(YEAR FROM SYSDATE)-1), 'DDMMYYYY')
    

    Demo on dbfiddle

    另一种选择是使用TRUNC 获得今年的第一天,然后减去 1:

    enrollement_dt <= TRUNC(SYSDATE, 'YEAR') - 1
    

    甚至更简单

    enrollement_dt < TRUNC(SYSDATE, 'YEAR')
    

    Demo on dbfiddle

    【讨论】:

    • 是的 '3112' 工作,但徘徊为什么 '122019' 不起作用。看起来它返回 2019 年 12 月 1 日。有没有更简洁的方法可以在不指定月份和日期的情况下获得相同的结果?
    • 因为您没有指定日期,Oracle 假定您想要一个月的第一天,并且 12 月 31 日不是
    • 有没有更简洁的方法可以在不指定月份和日期的情况下获得相同的结果?
    • 您可以使用 LAST_DAY 仅包含月份,例如last_day( to_date('12'||(EXTRACT(YEAR FROM SYSDATE)-1), 'MMYYYY'))
    • @JNPW 我添加了一个更清洁的解决方案和演示
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2019-10-15
    • 2022-11-29
    相关资源
    最近更新 更多