ホームページ >データベース >mysql チュートリアル >SQL でカンマ区切りの VARCHAR 列の値を分割するにはどうすればよいですか?

SQL でカンマ区切りの VARCHAR 列の値を分割するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-16 14:37:17237ブラウズ

How to Split Comma-Separated VARCHAR Column Values in SQL?

SQL での VARCHAR 列値の分割

SQL では、VARCHAR データ型は可変長の文字列を格納します。 VARCHAR 列を扱う場合、列の値を複数の個別の値に分割する必要がある場合があります。

次のような SQL SELECT ステートメントがあるとします。

SELECT 
  AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448

このステートメントは、すべての値を返します。 AD_Reference_ID 列が 1000448 に等しい、AD_Ref_List テーブルの Value 列の値。結果は次のようになります。 this:

Value
CO,VO

この結果では、Value 列にカンマで区切られた値のリストが含まれています。結果をさらにフィルタリングするには、次のような値を個々の行に分割することができます。

Value
CO
VO

これを実現する 1 つの方法は、次のように IN 演算子を使用することです。

SELECT 
  AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448
AND AD_Ref_List.Value IN
  (SELECT xx_insert.XX_DocAction_Next
  FROM xx_insert
  WHERE xx_insert_id = 1000283
  )
;

ただし、Oracle は値のリストを個々の値ではなく単一の文字列として扱うため、このクエリは行を返さない場合があります。これを修正するには、次の手法を使用できます。

SELECT r.Value
FROM   AD_Ref_List r
       INNER JOIN xx_insert x
       ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' )
WHERE  r.AD_Reference_ID = 1000448
AND    x.xx_insert_id    = 1000283;

このクエリは、LIKE 演算子を使用して、AD_Ref_List テーブルの値が xx_insert テーブルの値のリストの部分文字列であるかどうかを確認します。これにより、[値] 列の各値が個別の行として表示され、目的の結果が返されます。

以上がSQL でカンマ区切りの VARCHAR 列の値を分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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