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

Oracle转PostgreSQL日期处理SQL报错:date field value out of range的解决求助

Oracle转PostgreSQL日期处理SQL报错:date field value out of range的解决求助

各位PostgreSQL的大佬们好,我最近在做Oracle到PostgreSQL的SQL迁移,卡在日期处理这块了,求支招!

先给大家看我原来的Oracle代码逻辑:

CASE 
    WHEN (:dateOfBirthYear IS NULL OR :dateOfBirthMonth IS NULL OR :dateOfBirthDay IS NULL) 
    THEN NULL 
    ELSE to_date(to_char(:dateOfBirthYear) || to_char(:dateOfBirthMonth, '00') || to_char(:dateOfBirthDay, '00'), 'YYYY mm DD') 
END

我想着PostgreSQL有专门的make_date()函数,用起来应该更简洁,就改成了下面这段:

CASE 
    WHEN (:dateOfBirthYear IS NULL OR :dateOfBirthMonth IS NULL OR :dateOfBirthDay IS NULL) 
    THEN NULL 
    ELSE make_date(:dateOfBirthYear, :dateOfBirthMonth, :dateOfBirthDay) 
END

结果跑起来直接报错,错误日志是这样的:

org.postgresql.util.PSQLException: ERROR: date field value out of range: 0-00-00
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733) ~[postgresql-42.7.5.jar:42.7.5]

排查后发现问题出在传入的参数上——有时候前端或者上游传的不是NULL,而是空值或者0值(比如年份传0,月份传00),这时候make_date()直接就炸了,毕竟0年0月0日完全不是合法的日期格式。

现在我想请教各位,有没有办法修改这段SQL,让它能兼容这种空值/0值的情况呀?不需要生成什么特殊日期,只要像原来Oracle逻辑那样返回NULL就行。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:33:07