Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

expressão regular para palavras longas diferentes separadas por linha


É por causa da sua expressão regular. Altere para procurar apenas caracteres alfabéticos consecutivos:
 select regexp_substr('abc
 def
 ghi', '[[:alpha:]]+', 1 ,level)
   from dual
connect by regexp_substr('abc
def
ghi', '[[:alpha:]]+', 1 ,level) is not null

Funciona também para caracteres únicos:
select regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level)
from dual
     connect by regexp_substr('a
b
c', '[[:alpha:]]+', 1 ,level) is not null;

Você comentou:

Por favor, sempre coloque todas as informações na pergunta para começar, por favor.

Você parece estar procurando dividir em um caractere de nova linha (retorno de carro ou retorno de carro/alimentação de linha)

Nesse caso, você deseja dividir onde algo não um desses personagens. Eu usei todos os caracteres de controle aqui porque sou preguiçoso, mas funcionará para os dados fornecidos. Se você tiver alguns caracteres de Bell, isso não funcionará, você terá que ser mais específico.
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;