2016-04-18 9 views
0

Ich habe den folgenden Code in Oracle einen Wert abzurufen als Datetime-Format:Oracle REGEX Wert zu Zeit zu formatieren

E.EVE_START_DATE || ' ' || LPAD(NVL(TRIM(SUBSTR(AGD_START_TIME, 0, LENGTH(AGD_START_TIME)-2)), '00') || ':' || NVL(SUBSTR(AGD_START_TIME, -2), '00') || ':00', 8, '0') EVE_START_DATE 

Die AGD_STARTTIME Spalte es die Daten in diesem Format gespeichert:

930 
1330 
1630 
1730 

Ich habe versucht, dies mit einem Regex neu schreiben, aber Probleme haben.

Aber ich bin am Ende mit diesen zurückgegebenen Daten, warum würde nur die 930 Eintrag versaut werden?

08-JUN-16 16:30:00 
05-OCT-16 0 930 
05-OCT-16 13:30:00 
22-JUN-16 16:30:00 
13-JUL-16 0 930 
13-JUL-16 13:30:00 
10-AUG-16 16:30:00 
18-MAY-16 13:30:00 
21-SEP-16 13:30:00 
02-NOV-16 17:30:00 
22-JUN-16 16:30:00 
22-JUN-16 13:30:00 
14-SEP-16 0 930 
12-OCT-16 17:30:00 
20-OCT-16 17:30:00 
10-AUG-16 13:30:00 
+0

Weil Ihr regulärer Ausdruck für zwei Ziffern sieht, dann zwei Ziffern, während „930“ mit einem Raum und einer Ziffer beginnt. – mustaccio

+0

Nun, was wäre das Problem? – MB34

+1

Uhm ... nach einem Leerzeichen oder einer Ziffer suchen? – mustaccio

Antwort

0

Sie nagelten es 95% ich denke.

Sie haben nur einen zusätzlichen Platz vor 930. TRIM() sollte es lösen!

E.EVE_START_DATE || ' ' || regexp_replace('0'||TRIM(AGD_START_TIME),'.*([0-9]{2})([0-9]{2})$','\1:\2:00') EVE_START_DATE 

Probe:

SQL> with my_data(AGD_START_TIME) as 
    2 (
    3 select ' 930' from dual 
    4 union all 
    5 select '1330' from dual 
    6 union all 
    7 select '1630' from dual 
    8 union all 
    select '1730' from dual 
    9 10 ) 
11 select regexp_replace('0'||TRIM(AGD_START_TIME),'.*([0-9]{2})([0-9]{2})$','\1:\2:00') as str 
from my_data; 12 

STR 
-------------------------------------------------------------------------------- 
09:30:00 
13:30:00 
16:30:00 
17:30:00 
+0

@mustaccio verpasst. – MB34

+0

Auch wenn Sie Leerzeichen schneiden, wird es wegen falscher Regex fehlschlagen – rock321987

+0

Nein, es sucht nach den letzten 4 Ziffern. Und das Auffüllen von '0' nach links macht '930' zu' 0930'. –