You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于逗号分隔值列表构建带LIKE匹配的SQL WHERE子句

实现方案

不需要手动拼接多个OR条件,直接通过EXISTS关联STRING_SPLIT拆分后的参数值做前缀匹配即可,逻辑和你需要的多OR LIKE效果完全等价,同时避免了动态SQL带来的SQL注入风险。
核心实现代码如下:

SELECT * 
FROM users u
WHERE EXISTS (
    SELECT 1
    FROM STRING_SPLIT(@userList, ',') s
    WHERE u.username LIKE TRIM(s.value) + '%'
)
注意事项
  • 代码中对拆分出的参数值加了TRIM()处理,是为了兼容传参时逗号前后带多余空格的场景,比如入参写为'value1, value2,value3'时,不会因为值前后的空格导致匹配失效。
  • 该写法属于标准前缀匹配(通配符%仅在匹配串末尾),如果username字段建有索引,查询可以正常命中索引,性能表现和手写多个OR条件一致。
  • 不要直接用INNER JOIN关联拆分结果:如果某个用户名同时匹配多个入参前缀(比如入参为'ad,adm',用户名为admin时会同时命中两个匹配规则),JOIN写法会返回重复的用户行,必须额外加DISTINCT去重,会带来不必要的性能开销,EXISTS的写法天生不存在重复返回的问题。

内容的提问来源于stack exchange,提问作者Brian Kalski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:30:44