执行夏令时SQL脚本遇ORA-01878错误问题咨询
ORA-01878错误排查及解决
错误原因
你执行的SQL中,'2023-03-26 02:00:00.000000000 EUROPE/BERLIN'这个时间在欧洲柏林时区是不存在的:
- 每年3月最后一个周日,欧洲柏林时区会从冬令时(CET,UTC+1)切换到夏令时(CEST,UTC+2),时钟直接从01:59跳转到03:00,02:00这个时间点并不存在。
- Oracle无法解析这种无效的时间点,因此抛出
ORA-01878: 指定字段在日期时间或间隔中未找到的错误(错误提示表述有误导性,本质是时间本身无效)。
解决方法
- 调整为有效时间:将时间改为该日期的有效时段,比如01:59或03:00及以后:
或者select TO_TIMESTAMP_TZ('2023-03-26 01:59:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR') from dual;select TO_TIMESTAMP_TZ('2023-03-26 03:00:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR') from dual; - 设置会话参数忽略无效时间(Oracle 12c及以上版本支持):通过修改会话参数,让Oracle自动将无效时间调整为下一个有效时间:
ALTER SESSION SET ERROR_ON_OVERLAP_TIME = FALSE; select TO_TIMESTAMP_TZ('2023-03-26 02:00:00.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR') from dual;
内容的提问来源于stack exchange,提问作者Shri Nivi
相关产品推荐
相关产品推荐

