【问题标题】:Rails 3 regular expression. like in queryRails 3 正则表达式。就像在查询中
【发布时间】:2013-06-03 07:09:12
【问题描述】:

我想查询年龄字段值为 24 或 26 的数据库表。 我尝试在查询中使用“喜欢”。

User.where('age like ? or age like ?',"%24%","%26%")

我在这里做错了吗?

【问题讨论】:

  • 当您可以直接检查是否相等时,您为什么要使用 like? User.where("age = ? or age = ?", 24, 26)
  • 您的查询应该可以正常工作,您遇到的错误是什么?!
  • User.find_by_age([24,26]) 怎么样?

标签: ruby-on-rails regex sql-like


【解决方案1】:

试试这个

User.where("age in ?",["24","26"])

用逗号定界符表示你的年龄

ages = "24,26,28,17,18"
age_array = ages.split(",")
User.where("age in ?",age_array)

【讨论】:

  • 我相信@polurupraveen 正在寻找一个有 LIKE 的人
  • @sameera207 但他只检查确切数字时不必这样做,对吧?
  • 这将与字段值完全匹配。我想使用正则表达式进行查询,因为我的用户年龄是一个以逗号作为分隔符的字符串
  • @polurupraveen 然后您可以尝试将字符串转换为 int
  • User.where("age in ?",["24","26"]) 会给你语法错误,你必须使用User.where("age in (?)",["24","26"]) 注意() 围绕?
【解决方案2】:

你也可以试试这个..

User.where(:age => age_array)

【讨论】:

    【解决方案3】:

    将此模式用于多个搜索属性:

    ages = ["24", "26"]
    query = ages.map { |age| "age like '%#{age}%'" }.join(" OR ")
    User.where(query)
    

    它会自动生成这样的查询:

    SELECT 'users.*' FROM 'users' WHERE (age like '%24%' OR age like '%26%')
    

    希望此解决方案对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2021-08-18
      • 2017-10-10
      • 2020-10-26
      相关资源
      最近更新 更多