Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Klausa SQL IN?
Mengendalikan Rentetan Dipisahkan Koma dalam Pertanyaan SQL
Banyak operasi pangkalan data memerlukan parameter input sebagai senarai. Apabila senarai ini disediakan sebagai rentetan dipisahkan koma, menukarnya kepada format serasi SQL adalah penting.
Cabaran:
Pertimbangkan prosedur tersimpan yang menerima rentetan dipisahkan koma seperti ini:
<code class="language-sql">DECLARE @Account AS VARCHAR(200) SET @Account = 'SA,A'</code>
Matlamatnya adalah untuk mengubah rentetan ini menjadi klausa SQL IN
yang boleh digunakan:
<code class="language-sql">WHERE Account IN ('SA', 'A')</code>
Penyelesaian Berprestasi Tinggi:
Fungsi yang ditentukan pengguna menawarkan pendekatan yang paling cekap. Fungsi ini membahagikan rentetan yang dipisahkan koma kepada jadual:
<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>
Fungsi ini kemudiannya digunakan dalam pertanyaan SQL:
<code class="language-sql">SELECT * FROM yourtable WHERE account in (SELECT val FROM dbo.f_split(@account, ','))</code>
Mengapa Kaedah Ini Lebih Baik:
Berbanding dengan alternatif seperti penghuraian XML, fungsi ini menyediakan:
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Rentetan Dipisahkan Koma dengan Cekap untuk Klausa SQL IN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!