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

正規表現でリストからn番目の値を選択し、nullを許可します

    返信してくれた人に感謝します。あなたの答えと提供されたリンクの答えを熟読した後、私はこの解決策にたどり着きました:

    SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
      2  from dual;
    
    Data
    ----
    

    これは、「コンマまたは行の終わりが続く0個以上の文字のオプションのセットの2番目のオカレンスを見て、最初のサブグループ(コンマまたはコンマまたは終わりを差し引いたデータ)を返すと説明できます。行)。

    さまざまな位置でのヌル、複数のヌル、さまざまな位置の選択などでテストしたことを忘れました。

    私が見つけた唯一の注意点は、探しているフィールドが使用可能な数よりも大きい場合、NULLを返すだけなので、そのことに注意する必要があります。私の場合は問題ありません。

    編集:私はこれに遭遇するかもしれない将来の検索者の利益のために受け入れられた答えを更新しています。

    次のステップは、コードをカプセル化して、より単純で再利用可能な関数にすることです。関数のソースは次のとおりです:

      FUNCTION  GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
        BEGIN
          RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
      END GET_LIST_ELEMENT;
    

    これにより、正規表現の複雑さがあまり慣れていない開発者から隠され、使用時にコードがよりクリーンになります。 4番目の要素を取得するには、次のように呼び出します。

    select get_list_element('123,222,,432,555', 4) from dual;
    


    1. PL/SQLのUPDATEの影響を受ける行数

    2. SQL Server 2008 R2でCONCAT関数を使用するにはどうすればよいですか?

    3. Postgres9.0以降でPL/pgSQLを使用してテーブルをループする

    4. ProxySQL入門-MySQLとMariaDBの負荷分散チュートリアル