【问题标题】:Oracle SQL where clause does not work for some datesOracle SQL where 子句在某些日期不起作用
【发布时间】:2021-01-18 15:36:13
【问题描述】:

以下查询适用于最近的日期(例如,如果日期是 20-JUN-16、30-SEP-19)。但是,如果我将日期值设置为 29-MAR-80, 01-JAN-94 进行查询,它不会返回任何结果。想知道可能是什么原因。不允许将现有年份格式更改为 YYYY。 我们使用的是 Oracle 19c。

select * from V_IV_MUC where TRUNC(VALUE_TIMESTAMP) = '01-FEB-80';

【问题讨论】:

    标签: sql oracle oracle19c


    【解决方案1】:

    在这里,如果您的两位数年份格式为 RR(在 NLS_DATE_FORMAT 中),您的日期 '01-FEB-80' 将转换为 '01-FEB-1980',如果您的日期格式设置为YY(在NLS_DATE_FORMAT)。

    • YY -- 将年份转换为当前世纪 - 80 --> 2080
    • RR -- 根据当前年份 (1950-2049) 将年份转换为年份,因此 80 --> 1980

    您可以使用以下两个查询中的任何一个来避免对数据库设置的任何此类依赖。

    -- use date literal
    select * from V_IV_MUC where TRUNC(VALUE_TIMESTAMP) = date '1980-02-01';
    
    -- use date string with format
    select * from V_IV_MUC where TRUNC(VALUE_TIMESTAMP) = to_date('01-FEB-80','dd-mon-rr');
    

    【讨论】:

      猜你喜欢
      • 2021-04-20
      • 2011-05-04
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多