首頁 >資料庫 >mysql教程 >如何有效率地將逗號分隔的字串轉換為 SQL IN 清單?

如何有效率地將逗號分隔的字串轉換為 SQL IN 清單?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-09 14:26:45266瀏覽

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

將逗號分隔的字串轉換為SQL WHERE子句中的IN列表

問題:

在預存程序中將逗號分隔的字串儲存為參數時,任務是將其轉換為WHERE子句中的正確IN清單。

最佳實務解決方案:

為了有效率地執行此轉換,請建立一個自訂SQL Server函數:

<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>

使用方法:

使用以下語句填入WHERE子句:

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

效能比較:

與基於XML的分割方法相比,此函數提供了更高的效能。使用大型測試資料集:

  • XML分割耗時:1分21秒
  • f_split函數耗時:43秒

效能差異可能會有所不同,突顯了自訂分割函數的效率。

以上是如何有效率地將逗號分隔的字串轉換為 SQL IN 清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn