sql >> Database teknologi >  >> RDS >> Oracle

Konverter afgrænset streng til rækker i oracle

Afviger denne metode til at opdele en streng, mens der tillades nuller:

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 linkede svar søger det efter alle tegn, ikke-grådigt, efterfulgt af kombinationen af ​​~^ (med markeringen undsluppet, så ~\^ ) eller end-of-line. regexp_substr() calls bruger også de valgfrie argumenter til at specificere subexpr - så den får kun den første gruppering (.*? ) og ikke selve afgrænseren, som er i den anden gruppering.

Hvis du vil have et specifikt element, så er det endnu tættere på det linkede indlæg:

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

REGEX
-----
C~D^E

Eller mens du gør dette i en procedure, skal du bruge forbindelses-forespørgslen til at udfylde en samling og derefter vælge det element, du har brug for, hvis du vil se på mere end ét.



  1. Hvordan tilføjer du en redigeringsknap til hver række i en rapport i Oracle APEX?

  2. INSERT INTO @TABLE EXEC @query med SQL Server 2000

  3. Opfølgning på markørindstillinger

  4. Sådan viser du tabeller, der er berørt af kaskadesletning