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

Bagaimana dengan Cekap Menukar Rentetan Dipisahkan Koma kepada Senarai SQL IN?

Mary-Kate Olsen
Lepaskan: 2025-01-09 14:26:45
asal
262 orang telah melayarinya

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

Tukar rentetan yang dipisahkan koma kepada senarai IN dalam klausa SQL WHERE

Soalan:

Apabila anda menyimpan rentetan yang dipisahkan koma sebagai parameter dalam prosedur tersimpan, tugasnya adalah untuk menukarnya kepada senarai IN yang betul dalam klausa WHERE.

Penyelesaian Amalan Terbaik:

Untuk melaksanakan penukaran ini dengan cekap, buat fungsi SQL Server tersuai:

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

Penggunaan:

Isi klausa WHERE dengan pernyataan berikut:

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

Perbandingan prestasi:

Fungsi ini memberikan prestasi yang lebih tinggi berbanding kaedah segmentasi berasaskan XML. Gunakan set data ujian yang besar:

  • Masa pemisahan XML: 1 minit dan 21 saat
  • fungsi f_split mengambil masa 43 saat

Perbezaan prestasi mungkin berbeza-beza, menyerlahkan kecekapan fungsi pembahagian tersuai.

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

sumber:php.cn
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