sql >> Database >  >> RDS >> Oracle

Converteer een tekenreeks met scheidingstekens naar rijen in orakel

Deze methode voor het splitsen van een string omzeilen terwijl nulls worden toegestaan:

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

Net als in het gekoppelde antwoord zoekt het naar alle tekens, niet gretig, gevolgd door de combinatie van ~^ (met escapetekens, dus ~\^ ) of eindelijn. De regexp_substr() calls gebruiken ook de optionele argumenten om subexpr op te geven - dus het krijgt alleen de eerste groepering (.*? ) en niet het scheidingsteken zelf, dat in de tweede groep staat.

Als je een specifiek element wilt, dan is dat nog dichter bij het gelinkte bericht:

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

REGEX
-----
C~D^E

Of terwijl u dit in een procedure doet, gebruikt u de connect-by-query om een ​​verzameling te vullen en kiest u vervolgens het element dat u nodig heeft, als u er meer dan één wilt bekijken.



  1. UUID of SEQUENTIE voor primaire sleutel?

  2. Blockchain:wat is het, hoe het werkt en wat het betekent voor big data

  3. Vergelijking van SQL-hoofdlettergevoelige tekenreeksen

  4. Overschrijf de Query Optimizer voor uw T-SQL-joins met FORCEPLAN