Oracle SQL where 子句不适用于某些日期

Oracle SQL where clause does not work for some dates

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

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

在这里,你的日期'01-FEB-80'会被转换成'01-FEB-1980',如果你的两位数年份格式是RR(in NLS_DATE_FORMAT),它会被转换成'01-FEB-2080' 如果您的日期格式设置为 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');