您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Oracle:无效月份

Oracle:无效月份

1。

To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE

造成了问题。当您使用不带时间格式的to_date时,oracle将使用当前会话的NLS格式进行转换,在您的情况下,该格式可能不是“ DD / MM / YYYY”。检查一下…

sql> select sysdate from dual;

SYSDATE
---------
26-SEP-12

Which means my session's setting is DD-Mon-YY

sql> select to_char(sysdate,'MM/DD/YYYY') from dual;

TO_CHAR(SY
----------
09/26/2012


sql> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

sql> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;

TO_DATE(T
---------
26-SEP-12

2。

更重要的是,为什么要先转换为char然后再转换为日期,而不是直接进行比较

MaxDate = REP_DATE

如果要在比较之前忽略MaxDate中的时间分量,则应使用。

trunc(MaxDate ) = rep_date

反而。

==更新:基于更新的问题。

Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00

我认为问题更加复杂。如果rep_time仅是时间,则不能将其作为日期存储在数据库中。它必须是一个字符串或日期到时间间隔,或以数字表示,以秒为单位(感谢Alex,请参见this)。如果可能的话,我建议使用一列同时包含日期和时间的rep_date并将其直接与max date列进行比较。

如果它是正在运行的系统,并且您无法控制repdate,则可以尝试此操作。

trunc(rep_date) = trunc(maxdate) and 
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')

无论哪种方式,时间存储都不正确(正如您可以从1753年看到的那样),并且可能还会出现其他问题。

Oracle 2022/1/1 18:37:27 有284人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶