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

připojit klauzulí v regex_substr

"Zneužití" (jak to řekl Colin 't Hart) connected by má zde dobrý účel:pomocí REGEXP_SUBSTR můžete extrahovat pouze jednu ze 4 shod (23,34,45,56):regulární výraz [^,]+ odpovídá libovolné sekvenci znaků v řetězci, která neobsahuje čárku.

Pokud se pokusíte spustit:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

získáte 23 .

a pokud se pokusíte spustit:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

získáte také 23 pouze, že nyní nastavíme také dva další parametry :začněte hledat na pozici 1 (což je výchozí nastavení) a vrátí 1. výskyt.

Nyní spustíme:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

tentokrát dostaneme 34 (2. výskyt) a pomocí 3 jako poslední parametr vrátí 45 a tak dále.

Použití rekurzivního connected by spolu s level zajišťuje, že obdržíte všechny relevantní výsledky (ne však nutně v původním pořadí!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

vrátí:

TOKEN
23
34
45
56

který nejenže obsahuje všechny 4 výsledky, ale také je rozděluje do samostatných řádků v sadě výsledků!

Pokud budete hulit s ním – může vám poskytnout jasnější pohled na předmět.



  1. MySQL:jak získat rozdíl mezi dvěma časovými razítky v sekundách

  2. SQLite JSON()

  3. Jak zapsat znaky UTF-8 pomocí hromadného vkládání na SQL Server?

  4. Jak získat hodnotu ASCII v Oracle?