用于模糊搜索查询的sql

时间:2013-01-16 23:49:51

标签: mysql sqlite

我有一个包含以下

的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')
=> []

但是,db中有一些记录包含字母“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">,

任何人都可以解释问题所在吗?

1 个答案:

答案 0 :(得分:0)

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