ホームページ >データベース >mysql チュートリアル >SQL のカンマ区切りリストから N 番目の値を確実に抽出し、NULL を処理する方法
NULL を含むカンマ区切りリストから特定の値を選択するための正規表現ソリューション
REGEXP_SUBSTR を使用してカンマ区切りリストから n 番目の値を抽出する場合() の場合、NULL 値の処理は難しい場合があります。ここでは、問題の詳細な調査と包括的な解決策を示します。
まず、次のシナリオを考えてみましょう。
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data from dual; D - 2
このクエリは、から 2 番目の非 null 値 (「2」) を正常に取得します。正規表現 [^,] を使用したリスト。ただし、2 番目の値が null の場合、クエリは 3 番目の項目を返します:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data from dual; D - 3
この問題に対処するには、オプションの文字を許可するより柔軟な正規表現が必要です:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data from dual; D - 3
ただし、この正規表現は null を超える数値に対しても失敗します。
最終的には、解決策はより洗練されたものになります。 regex:
REGEX_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)
この正規表現は、n 回目に出現するカンマまたは行末より前のデータをキャプチャします。結果は次のようになります:
Data ----
このソリューションを再利用可能な関数にカプセル化するには、次のコードを検討してください:
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;
この関数は次のように呼び出すことができます:
select get_list_element('123,222,,432,555', 4) from dual;
潜在的な null や選択されている特定の要素に関係なく、このソリューションは、値を抽出するための堅牢かつ洗練された方法を提供します。 Oracle SQL のカンマ区切りリスト。
以上がSQL のカンマ区切りリストから N 番目の値を確実に抽出し、NULL を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。