ホームページ >データベース >mysql チュートリアル >SQL IN 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?

SQL IN 句のカンマ区切り文字列を効率的に解析するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-09 14:16:40321ブラウズ

How to Efficiently Parse Comma-Separated Strings for SQL IN Clauses?

SQL クエリでのカンマ区切り文字列の処理

多くのデータベース操作では、リストとしての入力パラメーターが必要です。 これらのリストがカンマ区切りの文字列として提供されている場合、それらを SQL 互換形式に変換することが重要です。

課題:

次のようなカンマ区切り文字列を受け取るストアド プロシージャを考えてみましょう。

<code class="language-sql">DECLARE @Account AS VARCHAR(200)
SET @Account = 'SA,A'</code>

目標は、この文字列を使用可能な SQL IN 句に変換することです:

<code class="language-sql">WHERE Account IN ('SA', 'A')</code>

高性能ソリューション:

ユーザー定義関数は、最も効率的なアプローチを提供します。この関数は、カンマ区切りの文字列をテーブルに分割します:

<code class="language-sql">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</code>

この関数は SQL クエリ内で使用されます。

<code class="language-sql">SELECT *
FROM yourtable 
WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>

この方法が優れている理由:

XML 解析などの代替手段と比較して、この関数は次の機能を提供します。

  • 卓越したパフォーマンス: XML ベースのメソッドよりも大幅に高速です。
  • 再利用性: さまざまなアプリケーションに簡単に適応できます。
  • 単純さ: 複雑な文字列操作を回避します。

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

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