sql >> データベース >  >> RDS >> Oracle

Oracle 11gは、一致するすべてのオカレンスを正規表現で取得します

    REGEXP_SUBSTRは1つの値のみを返します。文字列を疑似テーブルに変換してから、一致するものをクエリできます。これを行うためのXMLベースの方法がありますが、現時点では私を免れていますが、ソース文字列が1つしかない限り、connect-byを使用できます:

    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;
    

    ...あなたに与える:

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

    ...そして、元のパターンの少し単純なバージョンでそれをフィルタリングできます:

    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             
    

    これはあまりきれいではありませんが、どちらも1つのフィールドに複数の値を保持していません。



    1. PostgreSQLでのtimezone()関数のしくみ

    2. 結合を使用してPostgreSQLの異なるテーブルのデータを結合する

    3. Linux / WindowsでPgBouncerログをローテーションする方法は?

    4. インクリメンタルデータのマスキングとマッピング:変更の検出と更新…