ホームページ >データベース >mysql チュートリアル >SQL のカンマ区切りリストから N 番目の値を確実に抽出し、NULL を処理する方法

SQL のカンマ区切りリストから N 番目の値を確実に抽出し、NULL を処理する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 16:44:41901ブラウズ

How to Reliably Extract the Nth Value from a Comma-Separated List in SQL, Handling Nulls?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。