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

Oracle 11g získá všechny odpovídající výskyty regulárním výrazem

REGEXP_SUBSTR vrací pouze jednu hodnotu. Můžete změnit svůj řetězec na pseudo-tabulku a pak v ní hledat shody. Existuje způsob založený na XML, který mi v tuto chvíli uniká, ale použití connect-by funguje, pokud máte pouze jeden zdrojový řetězec:

SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
    SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1;

... vám dává:

SUBSTR             
--------------------
Txa233141b           
Ta233141             
Ta233142             
Ta233147            
Ta233148            

... a můžete to filtrovat pomocí trochu jednodušší verze původního vzoru:

SELECT substr
FROM (
    SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
    FROM (
        SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str
        FROM DUAL
    )
    CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1
)
WHERE REGEXP_LIKE(substr, '^[A-Za-z]{2}[0-9]{5,}$');

SUBSTR             
--------------------
Ta233141             
Ta233142             
Ta233147             
Ta233148             

Což není moc hezké, ale ani držení více hodnot v jednom poli.



  1. Jak zobrazit indexy pro databázi nebo tabulku v MySQL?

  2. Databáze SQL Server Importers z celého světa kompatibilní s přístupem

  3. Jak získat aktuální datum v MySQL

  4. Nelze VLOŽIT:CHYBA:Hodnota pole musí začínat { nebo informací o rozměru