2011-01-13 3 views
1

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

|PetName| 

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

STH как Свести Funciton здесь:

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

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

+0

выбрать нижний (литье (N'Časas 'as varchar)) отлично подходит для меня. Какова настройка вашей базы данных? –

+0

@Mark PM это не работает для меня, что вы написали, я не знаю, что такое сортировка, чау-чау я могу проверить это –

ответ

6

это должно работать, потому что кириллицы сверка базовых случаев все диакритические как диджей, Z, C, C, S, и т.д. ...

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

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

WHERE PetName COLLATE Cyrillic_General_CI_AI = 'cin' 
+1

@Mladen Prajdic : Я позаимствовал сопоставление, используемое в вашем ответе. Люди должны проголосовать за Младена! –

0

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

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

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

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

Смежные вопросы