sql >> Databasteknik >  >> RDS >> Oracle

ORACLE - regexp_substr för att returnera nollvärden

@Gary_W har skrivit om problemet med att använda det regex-mönstret för att dela strängar, just på grund av hur det behandlar tomma taggar. (Och är på ett uppdrag... )

Det alternativa tillvägagångssättet i det inlägget fungerar även här, med röravgränsaren escaped:

with t (str) as (
  select '1|CAT|DOG' from dual
  union all select '3|HARRY|GOAT|STACK' from dual
  union all select '6||LION|TIGER' from dual
)
select str, regexp_substr(str, '(.*?)(\||$)', 1, 2, null, 1) from t;

STR                REGEXP_SUBSTR(STR,
------------------ ------------------
1|CAT|DOG          CAT               
3|HARRY|GOAT|STACK HARRY             
6||LION|TIGER                        

På samma sätt för det tredje elementet:

select str, regexp_substr(str, '(.*?)(\||$)', 1, 3, null, 1) from t;

STR                REGEXP_SUBSTR(STR,
------------------ ------------------
1|CAT|DOG          DOG               
3|HARRY|GOAT|STACK GOAT              
6||LION|TIGER      LION              

Och den fjärde:

select str, regexp_substr(str, '(.*?)(\||$)', 1, 4, null, 1) from t;

STR                REGEXP_SUBSTR(STR,
------------------ ------------------
1|CAT|DOG                            
3|HARRY|GOAT|STACK STACK             
6||LION|TIGER      TIGER             


  1. Hur parallella planer startar – del 1

  2. SQL Server Hög tillgänglighet:Lägg till ny disk till en befintlig failover-klusterinstans

  3. lagra pengar i mysql

  4. Oracle - I CLAUSE fråga när du använder med flera värden, vilket gör det dynamiskt