如何通过在单词开头找到的搜索短语进行排序,然后使用SQL进行中间排序

时间:2010-10-06 09:42:51

标签: sql search sorting sql-like

假设我的表[users]包含字段[Name],我在我的应用程序中编写了一个查询按名称搜索。

数据库中的名称是:

拉​​拉 同盟

我的SQL查询是:

SELECT * FROM users WHERE [Name] LIKE '%al%'

其中'al'是我的搜索字词。

我如何按开头的搜索词排序结果,即'%al',然后才'%al%'。

结果集应为

同盟 拉拉

我正在使用SQL SERVER。

感谢。

4 个答案:

答案 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;