SQL クエリでのカンマ区切り文字列の処理
多くのデータベース操作では、リストとしての入力パラメーターが必要です。 これらのリストがカンマ区切りの文字列として提供されている場合、それらを SQL 互換形式に変換することが重要です。
課題:
次のようなカンマ区切り文字列を受け取るストアド プロシージャを考えてみましょう。
DECLARE @Account AS VARCHAR(200) SET @Account = 'SA,A'
目標は、この文字列を使用可能な SQL IN
句に変換することです:
WHERE Account IN ('SA', 'A')
高性能ソリューション:
ユーザー定義関数は、最も効率的なアプローチを提供します。この関数は、カンマ区切りの文字列をテーブルに分割します:
CREATE function [dbo].[f_split] ( @param nvarchar(max), @delimiter char(1) ) returns @t table (val nvarchar(max), seq int) as begin set @param += @delimiter ;with a as ( select cast(1 as bigint) f, charindex(@delimiter, @param) t, 1 seq union all select t + 1, charindex(@delimiter, @param, t + 1), seq + 1 from a where charindex(@delimiter, @param, t + 1) > 0 ) insert @t select substring(@param, f, t - f), seq from a option (maxrecursion 0) return end
この関数は SQL クエリ内で使用されます。
SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))
この方法が優れている理由:
XML 解析などの代替手段と比較して、この関数は次の機能を提供します。
以上がSQL IN 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。