Oracle 将日期字符串转换为日期时出错

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,等于上午

在“我的项目”的“我的表”中,任何事件的时间都以数字格式存储。现在我必须将其转换为oracle日期时间格式

下面是一个解释:

示例1:
•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>