oarcle执行报错提示:SQL 错误 [1839] [22008]: ORA-01839: 指定月份的日期无效问题解决

分享个有趣的sql错误排查解决。昨天晚上有厂家反应说我们有个视图查询数据的时候查不完整,有报错,联系我们排查处理。

拿到视图后我自己先试着跑了下,看到后也是纳闷儿

以下是我的处理思路:

既然是提示日期无效 ,那就从日期相关的字段下手,查看视图创建语句逐个注释执行,定位问题字段

定位到的问题字段

sql 复制代码
to_char(to_date(m.for_execute_time,'mm-dd hh24:mi'),'hh24:mi') as OEOREExecStTime, --要求执行时间

稍微解释下:这个写法时就是将01-01 08:00转为08:00

那为什么会有这个报错,我也头一回见,既然如此就是用笨办法逐条数据分析

跑到以下时间数据时就可以确定了,闰年的数据格式判断。

sql 复制代码
SELECT to_char(to_date(m.for_execute_time, 'MM-DD HH24:MI'), 'HH24:MI') as OEOREExecStTime,
 m.for_execute_time, m.*
FROM inpord.order_execute m
JOIN adt.inpatient n ON m.ipid = n.ipid
WHERE m.is_execute <> 'D'
AND n.ipid = '11588150'
and execute_time >='20240201000000'
and execute_time <='20240301000000'

因为m.for_execute_time没有年份,系统无法判断是否闰年,则报了这个错误,那就要改写下这个sql了,挑个带日期的,跟这个字段拼接下,再进行转换

sql 复制代码
--原sql
to_char(to_date(m.for_execute_time, 'MM-DD HH24:MI'), 'HH24:MI') as OEOREExecStTime
--现sql
to_char(to_date(SUBSTR(m.for_execute_date_time, 1, 8) || ' ' ||SUBSTR(m.for_execute_time, 7, 5), 'YYYYMMDD HH24:MI'), 'HH24:MI') AS OEOREExecStTime

完结撒花🌸

相关推荐
爱学java的ptt11 分钟前
mysql的存储引擎
数据库·mysql
小宇的天下19 分钟前
innovus Flip chip 产品设计方法(3)
数据库·windows·microsoft
GalenZhang88844 分钟前
使用 Python SDK 将数据写入飞书多维表格
数据库·python·飞书·多维表格
云和数据.ChenGuang1 小时前
GaussDB 期末考试题与面试题
数据库·opengauss·gaussdb·数据库期末试题
不屈的铝合金1 小时前
SQL 语言概述与数据库核心前置配置了解
数据库·sql·mysql·约束·sql 语句分类·字符集配置·校对规则
萧曵 丶1 小时前
可重复读(Repeatable Read)隔离级别下幻读产生的原因
数据库·sql·mysql
Antoine-zxt1 小时前
MySQL宕机日志迷局破解指南:从前台启动到精准排错
数据库·mysql·adb
松涛和鸣1 小时前
DAY47 FrameBuffer
c语言·数据库·单片机·sqlite·html
阳宗德1 小时前
基于CentOS Linux release 7.1实现了Oracle Database 11g R2 企业版容器化运行
linux·数据库·docker·oracle·centos
·云扬·1 小时前
MySQL运维效率提升:实用SQL语句合集
运维·sql·mysql