sql >> Databáze >  >> RDS >> Oracle

regulární výraz pro různě dlouhá slova oddělená řádky

Je to kvůli vašemu regulárnímu výrazu. Změňte jej tak, aby hledal jen po sobě jdoucí abecední znaky:

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

Funguje také pro jednotlivé znaky:

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

Přidali jste komentář:

Pro začátek prosím vždy uveďte všechny informace do otázky.

Zdá se, že se snažíte rozdělit na znak nového řádku (carriage return nebo carriage return/line feed)

V takovém případě se snažíte rozdělit tam, kde něco není jedna z těchto postav. Použil jsem zde všechny řídicí znaky, protože jsem líný, ale bude to fungovat pro vaše poskytnutá data. Pokud máte nějaké postavy Bell, toto nebude fungovat, budete muset být konkrétnější.

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. Sloučit řádky se stejným ID do pole

  2. Udělejte ORDER BY MySQL dynamickým v node.js

  3. Index pro nalezení prvku v poli JSON

  4. Jak sjednotit všechny dotazy SQL-SQLite podle případu?