ホームページ >データベース >mysql チュートリアル >SQL クエリの結果を単一の文字列に効率的に連結するにはどうすればよいですか?

SQL クエリの結果を単一の文字列に効率的に連結するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 09:42:43219ブラウズ

How to Efficiently Concatenate SQL Query Results into a Single String?

SQL クエリ結果を単一の文字列に蓄積する

クエリ結果を単一の文字列に連結することは、データベース プログラミングの一般的なタスクです。 SQL Server では、これを実現する 2 つのアプローチがあります。FOR XML PATH & STUFF 手法を使用するか、STRING_AGG 関数を利用します。

FOR XML PATH & STUFF

For SQL Server バージョン 2005 以降では、FOR XML PATH と STUFF の組み合わせが効果的です。アプローチ:

DECLARE @CodeNameString varchar(100)

SELECT 
   @CodeNameString = STUFF( (SELECT ',' + CodeName 
                             FROM dbo.AccountCodes 
                             ORDER BY Sort
                             FOR XML PATH('')), 
                            1, 1, '')

このソリューションは、FOR XML PATH('') を使用して結果を XML 文字列に連結し、STUFF を使用して XML 連結から継承された最初のカンマを削除します。

STRING_AGG 関数

SQL Server 2017 以降では、 STRING_AGG 関数は、このタスクに専用のソリューションを提供します。

DECLARE @CodeNameString varchar(100)

SELECT 
   @CodeNameString = STRING_AGG(CodeName, ',')
FROM 
   dbo.AccountCodes
ORDER BY 
   Sort

STRING_AGG 関数は、指定された区切り文字 (この場合は「,」) で区切られた結果を 1 つの文字列に直接連結します。

特殊文字の処理

FOR はXML PATH & STUFF アプローチでは、「<」、「>」、「&」などの特定の特殊文字を XML エンティティ (<、>、&) にエンコードする場合があります。これらの文字に問題がある場合は、USING XMLTYPE 句を指定した STRING_AGG 関数を使用できます。

DECLARE @CodeNameString varchar(100)

SELECT 
   @CodeNameString = STRING_AGG(CodeName, ',') USING XMLTYPE
FROM 
   dbo.AccountCodes
ORDER BY 
   Sort

以上がSQL クエリの結果を単一の文字列に効率的に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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