Oracle
 sql >> Baza danych >  >> RDS >> Oracle

wyrażenie regularne dla linii oddzielone różnymi długimi słowami

To z powodu twojego wyrażenia regularnego. Zmień to, by szukać tylko kolejne znaki alfabetu:

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

Działa również dla pojedynczych znaków:

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

Skomentowałeś:

Na początku zawsze umieszczaj wszystkie informacje w pytaniu.

Wygląda na to, że chcesz podzielić na znak nowej linii (powrót karetki lub powrót karetki/wysuw wiersza)

W takim przypadku chcesz podzielić się tam, gdzie czegoś nie jedną z tych postaci. Użyłem tutaj wszystkich znaków kontrolnych, ponieważ jestem leniwy, ale zadziała dla podanych danych. Jeśli masz kilka postaci Bell, to nie zadziała, musisz być bardziej szczegółowy.

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle binarne typy danych

  2. Najlepsze praktyki:zadania konserwacji i ulepszania dla Oracle Cloud

  3. TO_CHAR(data/godzina) Funkcja w Oracle

  4. Wyświetlacz Oracle ponad 24 godziny

  5. Dlaczego otrzymuję następującą funkcję LISTAGG błędu:„wynik konkatenacji ciągów jest za długi?*