2016-05-17 21 views
-1

Ich habe Notizen Spalte in der Oracle-Datenbank & Ich muss die Daten aus Thesen zu extrahieren. Die Daten in Notes Spalte kann eine Zeichenfolge mit dem Charakter oder Charakter mit Datumsangaben enthalten. Ich brauche nur die Daten zu sein bevölkerte sonst leer.Regulärer Ausdruck Datum in Oracle

Hinweise
PO Rechnungsnummer 1234
PO Rechnungsnummer 34555
addnsd; 2016.01.01; 2016.01.04; ssnfdskjnfkjsnfk
andksnd; 2016.01.02; 2016.02.01; sdnskjnfk
Hotels
Loding

Dank Aditi

+0

Schlechtes Design. Kannst du es neu einteilen? Ist das Datum immer im MM/TT/JJJ-Format und getrennt durch ";" ? – OldProgrammer

+0

Ja, es wäre in MM/TT/JJJJ, aber die Daten können sein -: asasds; 01/01/2016; 01/02/2016; sdsdsfdf oder dadad; adsdsd; 01/02/2016; 02/10/2016; sadsadsdsdd – user6167232

+0

Ist das Beispiel, in dem Sie mehrere Zeilen aus einer Tabelle oder einer Zeile anzeigen? – OldProgrammer

Antwort

0

\ d {2}/\ d {2}/\ d {4} dies wird diese Datumsformate entsprechen

+0

Können Sie bitte erläutern? Können Sie ein Beispiel zu OP-Daten zeigen? – Aleksej

+0

Dies ist ähnlich wie Ihre Lösung, außer dass es den vordefinierten Wert für die Ziffer '\ d' anstelle einer bestimmten Menge' [0-9] 'wie in Ihrem Beispiel verwendet. Also ist '\ d {2}/\ d {2}/\ d {4}' identisch mit '[0-9] {2}/[0-9] {2}/[0-9] {4} 'Eine Liste dieser vordefinierten Werte finden Sie hier: http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm#sthref553 – TwistedStem

0

Sie können dies versuchen:

with notes(text) as (
select 'PO Invoice number 1234' from dual union all 
select 'PO invoice number 34555' from dual union all 
select 'addnsd;01/01/2016;01/04/2016;ssnfdskjnfkjsnfk' from dual union all 
select 'andksnd;01/02/2016;02/01/2016;sdnskjnfk' from dual union all 
select 'Hotel' from dual union all 
select 'Loding' from dual 
) 
select text, listagg(date_string, ';') within group (order by date_string) 
from (
     select distinct text, regexp_substr(text, '[0-9]{2}/[0-9]{2}/[0-9]{4}', 1, level) as date_string 
     from notes 
     connect by regexp_instr(text, '[0-9]{2}/[0-9]{2}/[0-9]{4}', 1, level) != 0 
    ) 
group by text 

Diese DISTINCT verwendet, also wenn Sie das gleiche Datum mehr als einmal in einer Reihe haben, werden Sie nur 1 Vorkommen erhalten.