用于模糊搜索查询的SQL



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

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

由于sqlite3没有concat函数,而是使用管道||,所以我尝试将上面的代码写成

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

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

注意,小写的地方是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">,

谁能解释一下问题是什么?

我不确定,但是您需要一些带有"a"的通配符吗?例:"%a%"?

最新更新