SQL Server 2005: как заказать набор записей при использовании оператора LIKE - PullRequest
0 голосов
/ 11 марта 2011

Вот моя проблема.У меня есть выражение select примерно так:

select * from mytable where mycol like '%finance%'

Результаты выглядят примерно так:

id  mycol 
16  the finance department 
 8  i like the finance people 
43  chief finance officer 
22  finance 
68  finance trading

Я бы хотел, чтобы заказ получился следующим образом:

id  mycol 
22  finance 
68  finance trading 
43  chief finance officer 
16  the finance department 
 8  i like the finance people

По сути, для запроса select используйте:

where mycol = 'finance'

, затем

where mycol = 'finance%'

, затем

where mycol = '%finance%'

1) Я не могу использоватьСтолбец идентификатора для целей заказа.

2) Мой запрос гораздо более сложен, чем этот (он является частью подкачки набора записей на большой базе данных, используя SELECT TOP 1000000 ROW_NUMBER () OVER (ORDER BY t.category, t.sequence) ...

Я думаю, что мне может понадобиться использовать UNION или RANK () или что-то в этом роде, но сейчас я выхожу из своей лиги. Любое руководство очень ценится:)

1 Ответ

1 голос
/ 11 марта 2011

Одно очевидное решение:

Select Id, mycol
    , Case
        When mycol = 'finance' Then 1 
        When mycol Like 'finance%' Then 2
        When mycol Like '%finance%' Then 3
        End As Rnk
From MyTable
Where mycol Like '%finance%' 
Order By Rnk

Конечно, это не будет хорошо работать с лидирующим и конечным подстановочными знаками.Другой способ - использовать полнотекстовый поиск, который даст вам рейтинг релевантности.

CONTAINSTABLE (Transact-SQL)

...