Oracle SQL where子句在某些日期不起作用

surajs89

下面的查询可以很好地处理最近的日期(例如,如果日期是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';
大力水手

在这里,你的日期'01-FEB-80'将被转换为'01-FEB-1980',如果你的两位数年份格式RR(中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');

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章