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

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

Barbara Streisand
リリース: 2025-01-09 14:21:41
オリジナル
593 人が閲覧しました

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

コンマ区切りの文字列を SQL WHERE 句の IN リストに解析します

ストアド プロシージャが、ユーザー名やアカウント番号などの複数の値を表すコンマ区切りの文字列パラメーターを受け取ると仮定します。これらの値に基づいて行をフィルタリングするには、WHERE 句で IN リストを作成する必要があります。

SQL Server 2005 以降で推奨されるアプローチは、次のようなテーブル値関数を使用することです。

<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) AS f, CHARINDEX(@delimiter, @param) AS t, 1 AS 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>
ログイン後にコピー

この関数を使用して文字列を解析して IN のリストを作成するには、サブクエリを作成します。

<code class="language-sql">SELECT *
FROM yourtable 
WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>
ログイン後にコピー

別の方法として、LIKE 演算子を使用した、単純ではありますが効率の悪いパターン マッチング方法を使用することもできます。

<code class="language-sql">WHERE account LIKE '%,' + @account + '%,</code>
ログイン後にコピー

対照的に、f_split 関数を利用すると、特に大規模なデータセットを扱う場合にパフォーマンスが向上します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート