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

regex_substrの句で接続

    connected byの「乱用」(Colin't Hartが言ったように) ここには良い目的があります:REGEXP_SUBSTRを使用する 4つの一致(23、34、45、56)のうち1つだけを抽出できます:正規表現[^,]+ カンマを含まない文字列内の任意の文字シーケンスに一致します。

    実行してみる場合:

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

    23を取得します 。

    実行してみる場合:

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

    23も取得します それだけで、2つの追加パラメータも設定します。 :位置1(デフォルト)を探し始め、最初のオカレンスを返します。

    実行しましょう:

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

    今回は34を取得します (2回目)3を使用 最後のパラメータは45を返すため など。

    再帰的なconnected byの使用 levelと一緒に 関連するすべての結果を確実に受け取るようにします(ただし、必ずしも元の順序である必要はありません):

    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
    

    戻ります:

    TOKEN
    23
    34
    45
    56
    

    これには、4つの結果すべてが含まれるだけでなく、結果セット内の個別の行に分割されます!

    いじる場合 一緒に-それはあなたに主題のより明確な見方を与えるかもしれません。



    1. SQLキャスト日時

    2. 行の最大値を見つける方法

    3. MySQLで過去10分間のレコードを取得する方法

    4. RDBMSとNoSQL