Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Regulärer Ausdruck für zeilengetrennte verschiedene lange Wörter

Das liegt an deinem regulären Ausdruck. Ändern Sie es so, dass es nach nur sucht fortlaufende alphabetische Zeichen:

 select regexp_substr('abc
 def
 ghi', '[[:alpha:]]+', 1 ,level)
   from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null

Es funktioniert auch für einzelne Zeichen:

select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
     connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;

Sie haben Folgendes kommentiert:

Bitte geben Sie immer zuerst alle Informationen in die Frage ein.

Sie scheinen auf der Suche nach einem Zeilenumbruchzeichen zu sein (Wagenrücklauf oder Wagenrücklauf/Zeilenvorschub)

In diesem Fall möchten Sie aufteilen, wo etwas nicht ist einer dieser Charaktere. Ich habe hier alle Steuerzeichen verwendet, weil ich faul bin, aber es wird für Ihre bereitgestellten Daten funktionieren. Wenn Sie einige Bell-Zeichen haben, wird dies nicht funktionieren, Sie müssen genauer sein.

with the_data as ( 
select 'a
b
c' as dat
  from dual
       )
 select regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level)
  from the_data
connect by regexp_substr(dat, '[^[:cntrl:]]+', 1 ,level) is not null;