【问题标题】:Can I find all values LIKE ["_bc","a_c","ab_"]我可以找到所有的值吗,例如 ["bc","ac","ab"]
【发布时间】:2016-04-15 16:51:34
【问题描述】:

仅使用 SQLlite3 就可以找到与我要查找的值类似的值并传入数组吗?

例如我想要这样的东西

Url.where("token LIKE ?" ["_bc","a_b","ab_"])

【问题讨论】:

  • 别忘了你可以use regular expressions in SQLlite
  • 看起来你必须安装一个特殊的包。没什么大不了的,但我正试图用开箱即用的 SQLlite 来解决它。无缘无故...

标签: ruby-on-rails sqlite activerecord


【解决方案1】:

没有。您必须为每个条件重复 LIKE 子句,如下所示:

like_conditions = %w(_bc a_b ab_)
Url.where((["token LIKE ?"] * like_conditions).join(" OR "), *like_conditions)
# => SELECT `urls`.* FROM `urls` WHERE (token like '_bc' OR token like 'a_b' OR token like 'ab_')

where 子句的第一部分构造了一个长度与相似条件数相同的token LIKE ? 字符串数组,并使用OR 将它们连接起来(如果需要@,请将其更改为ANDs 987654327@ed 查询)。

最后一部分只是传递条件,但不是作为数组,而是作为单个元素(这就是 * 所做的),因为查询现在有三个参数而不是一个。

【讨论】:

  • 好的。看起来很合理
【解决方案2】:

你可以尝试这样的事情(未经 SQLite 测试):

class Url < ActiveRecord::Base
  scope :with_tokens, lambda{|*tokens|
    query = tokens.length.times.map{"token LIKE ?"}.join(" OR ")
    where(query, *tokens)
  }
end

Url.with_tokens("_bc", "a_b", "ab_")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多