sql >> Databasteknik >  >> RDS >> Oracle

Konvertera avgränsad sträng till rader i oracle

Riffa bort den här metoden för att dela en sträng samtidigt som det tillåter nollor:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');

REGEXP_SUBS
-----------
A
B
C~D^E

Som i det länkade svaret letar det efter alla tecken, icke girigt, följt av kombinationen av ~^ (med raden escaped, så ~\^ ) eller i slutet av raden. regexp_substr() calls använder också de valfria argumenten för att specificera subexpr - så den får bara den första grupperingen (.*? ) och inte själva avgränsaren, som finns i den andra grupperingen.

Om du vill ha ett specifikt element så är det ännu närmare det länkade inlägget:

select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;

REGEX
-----
C~D^E

Eller när du gör detta i en procedur, använd connect-by-frågan för att fylla i en samling och välj sedan det element du behöver, om du ska titta på mer än ett.



  1. Hur man skapar relationer i MySQL

  2. Gjut int till varchar

  3. MySQL-inlärningsväg

  4. Returnera kolumnvärden före UPPDATERING endast med SQL