Как упорядочить по поисковой фразе, найденной в начале слова и только после середины, используя SQL - PullRequest
2 голосов
/ 06 октября 2010

Допустим, у меня есть таблица [users] с полем [Name], и ​​я написал запрос в своем приложении для поиска по имени.

Имена в базе данных:

Lala Ally

Мой запрос SQL:

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

, где 'al' - мой поисковый термин.

Как бы отсортировать результаты по поисковому запросу, найденному в начале, т.е. "% al" и только потом "% al%".

Набор результатов должен быть

Ally Lala

Я использую SQL SERVER.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 06 октября 2010

Попробуй это.Это будет работать для всех строк, если вам требуется, если вы используете sql server-

SELECT * FROM users WHERE [Name] LIKE '%al%'
ORDER BY PATINDEX('%al%',[Name])
2 голосов
/ 06 октября 2010

Примерно так:

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
0 голосов
/ 19 июля 2013

Только что закончил с этим вариантом запроса для 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;
0 голосов
/ 06 октября 2010

Если ваша СУБД поддерживает это, я думаю, вы могли бы заключить ваш выбор в другой выбор, который использует index_of в имени, например:

select index_of('al', Name) as sortorder, * from (select * FROM users WHERE [Name] LIKE '%al%')
order by sortorder
...