Rumah > pangkalan data > tutorial mysql > Bagaimana Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Senarai SQL IN?

Bagaimana Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Senarai SQL IN?

Barbara Streisand
Lepaskan: 2025-01-09 14:21:41
asal
663 orang telah melayarinya

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

Uraikan rentetan yang dipisahkan koma ke dalam senarai IN dalam klausa SQL WHERE

Anggap bahawa prosedur tersimpan menerima parameter rentetan dipisahkan koma yang mewakili berbilang nilai, seperti nama pengguna atau nombor akaun. Untuk menapis baris berdasarkan nilai ini, kita perlu membina senarai IN dalam klausa WHERE.

Pendekatan yang disyorkan dalam SQL Server 2005 dan ke atas adalah menggunakan fungsi bernilai jadual, contohnya:

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;
Salin selepas log masuk

Untuk menggunakan fungsi ini untuk menghuraikan rentetan ke dalam senarai IN, bina subkueri:

SELECT *
FROM yourtable 
WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))
Salin selepas log masuk

Sebagai alternatif, anda boleh menggunakan kaedah pemadanan corak yang mudah tetapi kurang cekap menggunakan operator LIKE:

WHERE account LIKE '%,' + @account + '%,
Salin selepas log masuk

Sebaliknya, menggunakan fungsi f_split boleh memberikan prestasi yang lebih baik, terutamanya apabila berurusan dengan set data yang besar.

Atas ialah kandungan terperinci Bagaimana Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Senarai SQL IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan