0

我有一个 mysql 数据库的 sql 查询,其中包括以下内容

where("UPPER(CONCAT(firstName, ' ', lastName)) LIKE ?", params[:query])

由于 sqlite3 没有 concat 函数,而是使用管道 ||,因此我尝试将上面的内容写为

where("UPPER(firstName || ' ' || lastName) LIKE ?", params[:query])

但查询没有返回任何结果。我没有||正确使用吗?

注意,小写的 where 是 Rails 查询助手。

更新

事实证明 concat 运算符不是问题,所以我将标题更改为这个问题。我正在尝试对姓名进行模糊搜索,即返回包含该人姓名中搜索词的所有记录。例如,如果您搜索“a”,“tanja”将是一个正向匹配服务器正在使用我的 sql 运行此查询

这是正在运行的 sql(如果在搜索框中输入了“a”)

SELECT id, firstname, lastname, title FROM "employees" WHERE (upper(firstName ||' '||lastName) LIKE 'a')

ajax 请求(如控制台所示)是这样的

findByName: a employee.js:20
XHR finished loading: "http://localhost:3000/employees/search/a". jquery.js:8215
[] ##empty array returned

如果我在 Rails 控制台中运行查询,它也会返回空,所以问题可能出在我的 sql 上

>> Employee.select("id, firstname, lastname, title").where("upper(firstName ||' '||lastName) LIKE ?", "a")
  Employee Load (0.2ms)  SELECT id, firstname, lastname, title FROM "employees" WHERE (upper(firstName ||' '||lastName) LIKE 'a')
=> []

但是,数据库中有名称包含字母“a”的记录。例如,这是数据库记录。谁能解释为什么像上面这样的查询(假设人名包含搜索的字母)在这样的记录上不起作用。

[#<Employee id: 1, firstname: "Steven", lastname: "Wells", managerid: 4, title: "Software Architech", department: "Engineering", officephone: "604-999-8989", cellphone: "345-678-0987", email: "sweels@email.com", city: "Vancouer", picture: "assets/steven_wells.jpg", twitterid: "@fartbreath", blogurl: "http://blahblah.com", created_at: "2013-01-16 01:24:38", updated_at: "2013-01-16 01:24:38">,

谁能解释可能是什么问题?

4

1 回答 1

0

我不确定,但你需要一些带有“a”的通配符吗?例如 - “%a%”?

于 2013-01-17T00:36:48.677 回答