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

如何从数组生成多个OR条件拼接LIKE子句实现SQL查询

从数组拼接多个OR LIKE条件的实现方法

你当前的实现思路是可行的,只需要修正Sequel Dataset的不可变特性带来的问题即可,另外还有更简洁的内置方法可以直接实现该需求。

原有代码的注意事项

Sequel的Dataset是不可变对象,where、or、limit等方法都不会修改原实例,而是返回新的Dataset实例。你原有代码中循环调用dataset.or但没有把返回值赋值回变量,最终生成的SQL不会包含后续追加的OR条件,需要调整为如下写法:

# 初始化带第一个LIKE条件的dataset
dataset = dataset.where(Sequel.like(:column, "%#{myarray.first}%"))

# 剩余元素逐个追加OR条件,每次更新dataset变量
myarray.drop(1).each do |v|
  dataset = dataset.or(Sequel.like(:column, "%#{v}%"))
end

dataset = dataset.limit(100)

更简洁的内置方法实现

不需要手动循环处理,Sequel的Sequel.like方法支持直接传入多个匹配模式,会自动生成OR连接的LIKE条件,写法如下:

# 把数组元素转换为LIKE匹配模式
like_patterns = myarray.map { |v| "%#{v}%" }
# 直接生成多OR的LIKE条件
dataset = dataset.where(Sequel.like(:column, *like_patterns)).limit(100)

额外优化建议

如果数组可能为空的情况,建议提前做判空处理,避免生成不符合预期的恒假条件:

if myarray.any?
  like_patterns = myarray.map { |v| "%#{v}%" }
  dataset = dataset.where(Sequel.like(:column, *like_patterns))
end
dataset = dataset.limit(100)

这种写法同时也规避了SQL注入风险,Sequel会自动转义匹配模式中的特殊字符(比如%、_等),安全性远高于手动拼接SQL字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:12:01