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

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

Mary-Kate Olsen
發布: 2025-01-09 14:26:45
原創
262 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板