假设我的表[users]包含字段[Name],我在我的应用程序中编写了一个查询按名称搜索。
数据库中的名称是:
拉拉 同盟
我的SQL查询是:
SELECT * FROM users WHERE [Name] LIKE '%al%'
其中'al'是我的搜索字词。
我如何按开头的搜索词排序结果,即'%al',然后才'%al%'。
结果集应为
同盟 拉拉
我正在使用SQL SERVER。
感谢。
答案 0 :(得分:2)
这样的事情:
SELECT 0, [Name] FROM users WHERE [Name] LIKE 'al%'
UNION
SELECT 1, [Name] FROM users WHERE [Name] LIKE '%al%'
AND NOT [Name] LIKE 'al%'
ORDER BY
1, 2
答案 1 :(得分:2)
试试这个。假设您正在使用sql server-
,这将适用于所有字符串SELECT * FROM users WHERE [Name] LIKE '%al%'
ORDER BY PATINDEX('%al%',[Name])
答案 2 :(得分:0)
如果你的DBMS支持它,我想你可以将你的select包装在名字上使用index_of的另一个select中,例如:
select index_of('al', Name) as sortorder, * from (select * FROM users WHERE [Name] LIKE '%al%')
order by sortorder
答案 3 :(得分:0)
最后,SQLite的这个查询变体做了同样的事情,搜索词是“jeff”:
SELECT name
FROM details WHERE name LIKE 'jeff%' OR name LIKE '%jeff%'
ORDER BY (0 - (name LIKE 'jeff%') + (name LIKE '%jeff%')) || name
LIMIT 100;