You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle查询筛选昨日数据时遭遇ORA-01841错误求助

ORA-01841错误排查与解决(筛选昨日作业数据场景)

当用sysdate-TO_DATE(srvb.rectarih1,'YYYY/MM/DD')=1筛选昨日作业数据时触发ORA-01841错误,提示"(full) year must be between -4713 and +9999, and not be 0",本质是srvb.rectarih1字段里存在不符合YYYY/MM/DD格式的数据,导致TO_DATE转换时解析出了非法年份。

解决步骤:

  1. 排查脏数据
    先找出字段里格式异常的记录,用正则匹配或者长度校验:

    -- 用正则筛选不符合YYYY/MM/DD格式的记录
    SELECT rectarih1 FROM srvb
    WHERE NOT REGEXP_LIKE(rectarih1, '^\d{4}/\d{2}/\d{2}$');
    
    -- 或者检查长度不符合10位的记录(含分隔符)
    SELECT rectarih1 FROM srvb
    WHERE LENGTH(TRIM(rectarih1)) != 10;
    
  2. 修复脏数据
    对查出的非法格式数据进行修正,比如补全缺失的年份、修正日期分隔符、删除无效值等,确保所有rectarih1的值都严格符合YYYY/MM/DD格式。

  3. 优化筛选逻辑
    替换原有的日期相减写法,改用更直观且安全的日期比较方式,避免隐式转换问题:

    WHERE TO_DATE(srvb.rectarih1,'YYYY/MM/DD') = TRUNC(sysdate) - 1
    

    或者用TRUNC统一截断时间后再计算差值:

    WHERE TRUNC(sysdate) - TRUNC(TO_DATE(srvb.rectarih1,'YYYY/MM/DD')) = 1
    

内容的提问来源于stack exchange,提问作者Ksaxes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:20:43