考虑具有名为name的列的users表,该列具有以下三行。
我想构造一个返回记录的查询,其中name是输入的子字符串。例如,如果我查询Alice Jackson,我想要Alice。如果我搜索Bobby,我想要Bob。但如果我搜索汽车,我想要没有比赛。反转LIKE
。
可以这样做吗?可以使用ActiveRecord语法完成吗?
答案 0 :(得分:1)
您可以执行类似( SQL Server语法)的操作:
SELECT name
FROM users
WHERE 'your query' + ' ' LIKE name + ' %';
以下将找到Alice:
SELECT name
FROM users
WHERE 'Alice Jackson' + ' ' LIKE name + ' %';
SELECT name
FROM users
WHERE 'Alice' + ' ' LIKE name + ' %';
以下将找不到Alice:
SELECT name
FROM users
WHERE 'Ali' + ' ' LIKE name + ' %';
答案 1 :(得分:1)
我想出了SQLite的语法来做到这一点。
User.where("? LIKE name || '%'", query)
双管显然是SQLite中连接的必要条件。但是,正如plalx所示,不同的SQL服务器使用不同的方言,这使得我的应用程序数据库依赖于此查询。由于在大多数情况下,最终查询将包含将此逆LIKE
的潜在子集限制为少于10条记录的附加子句,因此我将提取这些记录并在应用程序级别执行匹配。
答案 2 :(得分:0)
使用ActiveRecord IN
表达式:
Client.where(:name => query.split(" "))
此代码将生成如下SQL:
SELECT * FROM clients WHERE (clients.name IN ['Alice', 'Jackson']);