2011-01-13 4 views
1

국가 별 문자가 포함 된 열이 있습니다. 쿼리를 모두 하나의 조건으로 모두 작성하려면 어떻게 작성합니까? 여기 평평의 funciton 같은SQL Server에서 자국어 문자 병합

|PetName| 

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

s 번째는 :

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

NVARCHAR에서 VARCHAR에에 캐스팅 시도했지만 도움이되지 않았다. 모든 문자에 REPLACE을 사용하지 마십시오.

+0

아래쪽을 선택하십시오 (캐스트 (N'Chasas 'as varchar))가 올바르게 작동합니다. 데이터베이스 데이터 정렬은 어떻게 설정됩니까? –

+0

@Mark PM 내가 작성한 내용이 작동하지 않습니다. 데이터 정렬이 무엇인지 알 수 없습니다. chow는 이것을 확인할 수 있습니다. –

답변

6

이 작동합니다 키릴 정렬 기본 경우 때문에 등 DJ, 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 등)를 수행하는 경우,/db 열이 이미 액센트를 구분하지 않으면 강제로 COLLATE 할 수 있습니다.

일반적으로,이

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

같은 쿼리 (변경하지 않는 한)를 구분하지 않습니다 기본 데이터 정렬 이후, 두 열을 반환합니다. FULLTEXT 인덱스에서는 작동하지 않습니다.