获取日期当月最后一天时触发ORA-01861格式不匹配错误
解决ORA-01861错误并获取月份最后一天的日部分
错误原因
ORA-01861错误的本质是日期字面量与Oracle默认解析格式不匹配。你的V_BILLEND_DT如果是字符串类型,直接传入LAST_DAY时,Oracle会用会话默认的日期格式去解析它,但默认格式无法识别2022-12-31T00:00:00+05:30这种带时区的ISO格式,导致解析失败。
解决方案
1. 字符串类型变量处理
如果V_BILLEND_DT是字符串类型,必须先将其转换为Oracle能识别的带时区时间戳类型,再进行后续处理:
使用TO_TIMESTAMP_TZ函数搭配对应格式模型解析字符串,传入LAST_DAY获取当月最后一天,最后用TO_CHAR提取日部分。
2. 正确执行语句
SELECT TO_CHAR(LAST_DAY(TO_TIMESTAMP_TZ(V_BILLEND_DT, 'YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')), 'DD') INTO V_updatMonth FROM DUAL;
格式模型说明:
YYYY-MM-DD:匹配日期部分"T":匹配字面量THH24:MI:SS:匹配时间部分TZH:TZM:匹配时区偏移(如+05:30)
3. 日期/时间戳类型变量处理
如果V_BILLEND_DT已经是DATE或TIMESTAMP WITH TIME ZONE类型仍报错,可显式指定转换格式,或检查会话的NLS_DATE_FORMAT参数是否兼容,优先使用显式转换保证兼容性。
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

