在我的项目中 my_table 中任何事件的时间都以数字格式存储。现在我必须将其转换为 oracle 日期时间格式。
下面是一个解释:
示例 1:
•Sched_Arr_Tm = 0450,将等于凌晨 04:30(前 2 个是 HH(24 小时制。由于 04 < 12,因此只需将该数字用作小时)),接下来的 2 个是小时的小数(0.50 * 60 分钟 = 30 分钟)
•Sched_Arr_Tm = 2100,将等于晚上 9:00(因为 21> 12,然后取 21-12=9)
•Sched_Arr_Tm = 1475,将等于 02:45 Pm(前 2 个是 HH(24 小时制。因为 14 > 12。然后取 14-12=2),然后使用该数字作为小时))和下一个 2是一小时的小数(0.75 * 60 分钟 = 45 分钟)
•Sched_Arr_Tm = 0075,将等于上午 12:45(因为小时 = 00,那么小时 = 12),接下来的 2 是小时的小数(0.75 * 60 分钟 = 45 分钟)
我可以根据上述登录提取数据,但在将其转换为日期时出错。
select sched_arr_tm,
LPAD(substr(tn.sched_arr_tm, 1,length(tn.sched_arr_tm) - 2),2,'0') as HH,
RPAD(TRUNC(TO_NUMBER(substr(tn.sched_arr_tm,3,length(tn.sched_arr_tm) - 2)) * .60,0),2,'0') as MM,
'00' AS SS,
LPAD(substr(tn.sched_arr_tm,1,length(tn.sched_arr_tm) - 2),2,'0')
||':' ||
RPAD(TRUNC(TO_NUMBER(substr(tn.sched_arr_tm,3,length(tn.sched_arr_tm) - 2)) * .60,0),2,'0')
||':'||
LPAD(0,2,0) AS DTTM,
TO_DATE(LPAD(substr(tn.sched_arr_tm,1,length(tn.sched_arr_tm) - 2),2,'0')
||':' ||
RPAD(TRUNC(TO_NUMBER(substr(tn.sched_arr_tm,3,length(tn.sched_arr_tm) - 2)) * .60,0),2,'0')
||':'||
LPAD(00,2,0),'HH24:MI:SS') AS DTTM,
tn.sched_slip_arr_tm
来自 MY_TABLE;
我收到此错误:
ORA-01858: 在需要数字的地方发现了一个非数字字符。