0

my_table の私のプロジェクトでは、イベントの時間は数値形式で保存されます。ここで、それをオラクルの日時形式に変換する必要があります。

以下に説明を示します。

例 1 :
•Sched_Arr_Tm = 0450、午前 4 時 30 分 (最初の 2 は HH (24 時間時計。04 < 12 なので、その数字を時間として使用)) に等しく、次の 2 は 1 時間に相当する分数です。 (.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は 1 時間に相当する分数です (.75 * 60 分 = 45 分)

•Sched_Arr_Tm = 0075 は、午前 12 時 45 分 (時間 = 00 であるため、時間 = 12) に等しく、次の 2 は 1 時間に相当する分数 (.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: 数値が必要な場所に非数値文字が見つかりました。

4

1 に答える 1

1

あなたはこれを行うことができます:

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>
于 2013-01-29T07:42:42.180 に答える