我有一个包含以下
的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">,
任何人都可以解释问题所在吗?
答案 0 :(得分:0)
我不确定,但是你需要一些带有“a”的通配符吗?例如 - “%a%”?