在SQL Server中展平国家字符

时间:2011-01-13 10:02:47

标签: sql sql-server string tsql sql-server-2008

我有一个包含国家字符的宠物名称的列。如何在一个条件下编写查询以匹配它们?

|PetName|

   Ćin
   ćin
   Ĉin
   ĉin
   Ċin
   ċin
   Čin
   čin
像这里的FLATTEN函数一样:

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

试图将其从NVARCHAR转移到VARCHAR,但它没有帮助。我想避免对每个角色使用REPLACE

3 个答案:

答案 0 :(得分:6)

这应该有效,因为西里尔文整理基础案例所有变音符号如Đ,Ž,Ć,Č,Š等......

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 

答案 1 :(得分:2)

您可以更改用于比较的排序规则:

WHERE PetName COLLATE Cyrillic_General_CI_AI = 'cin' 

答案 2 :(得分:0)

没有真正的方法或内置函数可以去除字符的重音。 如果您正在进行比较(LIKE,IN,PATINDEX等),如果列/ db不是非重音不敏感,您可以强制COLLATE。

通常情况下,这样的查询

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

将返回两列,因为默认排序规则(除非您更改它)不敏感。但这对FULLTEXT索引不起作用。

相关问题