SQL Server Латинская Accent Чувствительная сортировка - PullRequest
0 голосов
/ 09 апреля 2019

У меня следующий запрос

select T.[KEY] Id,  T.[RANK]  Score, D.Name,
CASE 
            WHEN D.Name = 'će' THEN 1000        
            WHEN D.Name  COLLATE Latin1_General_CI_AS LIKE 'će%' THEN 500       
            WHEN D.Name  LIKE 'će%' THEN 100        
            ELSE 10 
END MatchType
from containstable(Dishes, (Name), '("će*")', language 0x0, 15) as T
INNER JOIN Dishes D On T.[KEY] = D.DishId
ORDER BY MatchType Desc, Score Desc 

И он дает следующий результат:

enter image description here

Может кто-нибудь сказать мне, почему "Кевапи "не имеет 500 очков в этом случае?Согласно Collation это должно?

Смысл здесь в том, чтобы расставить приоритеты će над ce в этом случае.

1 Ответ

2 голосов
/ 09 апреля 2019

Вы конвертируете строковый литерал в varchar.

Плохо:

select 1 
where N'Ćevapi' COLLATE Latin1_General_CI_AS LIKE 'će%'

Хорошо:

select 1 
where N'Ćevapi' COLLATE Latin1_General_CI_AS LIKE N'će%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...