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

カンマ区切り文字列を SQL IN リストに効率的に変換するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-09 14:26:45349ブラウズ

How to Efficiently Convert a Comma-Separated String to an SQL IN List?

SQL WHERE 句のカンマ区切り文字列を IN リストに変換します

質問:

カンマ区切りの文字列をストアド プロシージャのパラメータとして保存する場合、その文字列を WHERE 句の正しい IN リストに変換する必要があります。

ベスト プラクティス ソリューション:

この変換を効率的に実行するには、カスタム SQL Server 関数を作成します。

<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>

使用法:

WHERE 句に次のステートメントを入力します:

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

パフォーマンスの比較:

この関数は、XML ベースのセグメンテーション方法と比較して高いパフォーマンスを提供します。大規模なテスト データセットを使用します:

  • XML 分割時間: 1 分 21 秒
  • f_split 関数には 43 秒かかります

パフォーマンスの違いは異なる場合があり、カスタム分割関数の効率が際立っています。

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

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