Свести национальные символы в SQL Server - PullRequest
1 голос
/ 13 января 2011

У меня есть столбец, который содержит имена домашних животных с национальными символами. Как мне написать запрос, чтобы сопоставить их все в одном условии?

|PetName|

   Ćin
   ćin
   Ĉin
   ĉin
   Ċin
   ċin
   Čin
   čin

Что-то вроде функции FLATTEN здесь:

...WHERE LOWER(FLATTEN(PetName)) = 'cin'

Пытался привести его к NVARCHAR до VARCHAR, но это не помогло. Я хотел бы избежать использования REPLACE для каждого символа.

Ответы [ 3 ]

6 голосов
/ 13 января 2011

это должно работать, потому что в основе кириллического сопоставления все диакритические знаки, такие как Đ, Ž, Ć, Č, Š и т. Д. *

declare @t table(PetName nvarchar(100))
insert into @t
SELECT N'Ćin' union all 
SELECT N'ćin' union all 
SELECT N'Ĉin' union all 
SELECT N'ĉin' union all 
SELECT N'Ċin' union all 
SELECT N'ċin' union all 
SELECT N'Čin' union all 
SELECT N'čin'

SELECT  *
FROM    @t
WHERE   lower(PetName) = 'cin' COLLATE Cyrillic_General_CS_AI 
2 голосов
/ 13 января 2011

Вы можете изменить параметры сортировки, используемые для сравнения:

WHERE PetName COLLATE Cyrillic_General_CI_AI = 'cin' 
0 голосов
/ 13 января 2011

На самом деле нет способа или встроенной функции, которая бы убирала акценты с персонажей. Если вы выполняете сравнения (LIKE, IN, PATINDEX и т. Д.), Вы можете просто принудительно указать COLLATE, если столбец / дБ еще не чувствителен к ударению.

Обычно такой запрос

with test(col) as (
select 'Ćin' union all
select 'ćin')
select * from test
where col='cin'

вернет оба столбца, поскольку параметры сортировки по умолчанию (если вы не измените их) нечувствительны. Это не будет работать для индексов FULLTEXT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...