Rumah >pangkalan data >tutorial mysql >Bagaimana Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Senarai SQL IN?
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:
<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>
Untuk menggunakan fungsi ini untuk menghuraikan rentetan ke dalam senarai IN, bina subkueri:
<code class="language-sql">SELECT * FROM yourtable WHERE account IN (SELECT val FROM dbo.f_split(@account, ','))</code>
Sebagai alternatif, anda boleh menggunakan kaedah pemadanan corak yang mudah tetapi kurang cekap menggunakan operator LIKE:
<code class="language-sql">WHERE account LIKE '%,' + @account + '%,</code>
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!