【问题标题】:Translating rails queries for sqlite为 sqlite 翻译 rails 查询
【发布时间】:2010-08-29 13:05:24
【问题描述】:

我将如何翻译这些 mysql 查询以使用 sqlite3?:

self.find(:first, :conditions => ['concat(first_name, \' \', middle_names, \' \', last_name) = ?', name])

self.find(:all, :conditions => ['(concat(first_name, \' \', last_name) LIKE ?) OR (concat(first_name, \' \', middle_names, \' \', last_name) LIKE ?)', "%#{name}%", "%#{name}%"])

【问题讨论】:

  • 您可能会考虑对该表进行非规范化,以便将全名保留为单独的 indexed 字段,或者创建一个视图,以避免必须执行该连接操作和结束。 (FWIW,为数据库拆分名称无论如何都充满了麻烦。毕竟,对于很多人来说,他们的first_name 就是他们的family_name,这只是该领域众多问题中的一个。)
  • 嗨,谢天谢地,我写这篇文章的学校已经处理了名字和姓氏,所以他们会解决这个问题!我所有的数据都来自 csv 导入。

标签: mysql ruby-on-rails sqlite


【解决方案1】:

谷歌搜索可能会有所帮助:http://www.google.com/search?q=sqlite+concat

在 SQLite 中,concat 运算符是||。为了更容易阅读带有单引号 ' 的字符串,我会用双引号 " 将这些字符串括起来,所以你不需要这么多的转义:

self.find(:first, :conditions => ["first_name || ' ' || middle_names || ' ' || last_name = ?", name])

self.find(:all, :conditions => ["(first_name || ' ' || last_name LIKE ?) OR (first_name, ' ', middle_names || ' ' || last_name LIKE ?)", "%#{name}%", "%#{name}%"])

【讨论】:

    【解决方案2】:

    ||是 SQLite 连接运算符。所以这可能会起作用:

    self.find(:first, :conditions => ['first_name || \' \' || middle_names || \' \' || last_name = ?', name])
    self.find(:all, :conditions => ['(first_name || \' \' || last_name LIKE ?) OR (first_name || \' \' || middle_names || \' \' || last_name LIKE ?)', "%#{name}%", "%#{name}%"])
    

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2021-04-13
      • 2013-04-23
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多