首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板