Oracle 将日期字符串转换为日期时出错
在“我的项目”的“我的表”中,任何事件的时间都以数字格式存储。现在我必须将其转换为oracle日期时间格式 下面是一个解释: 示例1:Oracle 将日期字符串转换为日期时出错,oracle,date-arithmetic,ora-01858,Oracle,Date Arithmetic,Ora 01858,在“我的项目”的“我的表”中,任何事件的时间都以数字格式存储。现在我必须将其转换为oracle日期时间格式 下面是一个解释: 示例1: •Sched_Arr_Tm=0450,等于凌晨4:30(前2个是HH(24小时时钟。由于0412,则取21-12=9) •Sched_Arr_Tm=1475,等于下午2:45(前2个是HH(24小时制,因为14>12,然后取14-12=2),然后用这个数字作为小时),下2个是一小时的分数(75*60分钟=45分钟) •Sched_Arr_Tm=0075,等于上午
•Sched_Arr_Tm=0450,等于凌晨4:30(前2个是HH(24小时时钟。由于04<12,则仅使用该数字作为小时)),后2个是一小时的分数(50*60分钟=30分钟) •Sched_Arr_Tm=2100,将等于晚上9:00(因为21>12,则取21-12=9) •Sched_Arr_Tm=1475,等于下午2:45(前2个是HH(24小时制,因为14>12,然后取14-12=2),然后用这个数字作为小时),下2个是一小时的分数(75*60分钟=45分钟) •Sched_Arr_Tm=0075,等于上午12:45(因为小时=00,那么小时=12),接下来的2个是小时的分数当量(.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
从我的桌子上
我得到这个错误:
ORA-01858:在需要数字的位置找到非数字字符
您可以通过以下方式执行此操作:
SQL> with data as (select 450 Sched_Arr_Tm from dual
2 union all
3 select 1475 from dual
4 union all
5 select 2100 from dual)
6 select Sched_Arr_Tm, to_date(hours||':'||(60*(mins/100)), 'hh24:mi')
7 from (select Sched_Arr_Tm, substr(Sched_Arr_Tm, -2) mins,
8 substr(Sched_Arr_Tm, 1, length(Sched_Arr_Tm)-2) hours
9 from data)
10 /
SCHED_ARR_TM TO_DATE(HOURS||':
------------ -----------------
450 01-jan-2013 04:30
1475 01-jan-2013 14:45
2100 01-jan-2013 21:00
SQL>