我有一张各种语言的城市名称表。这些名称通常包含é
,ü
等字符。我正在构建搜索功能,以便用户可以搜索名称,但我希望忽略所有特殊字符,并将它们视为英文26个字母的字母而是字母。
例如,名称munchen
的查询应与值München
匹配。查询将比较的两侧转换为不区分大小写的26个字母的字母表,然后执行比较。
有没有直接的方法来实现这一目标?
这些角色在任何方面都不是特别的。匹配和排序受列的排序规则影响 - 这指定了排序顺序以及哪些字符匹配。
排序规则可以区分大小写或不区分大小写,它指定Mary
是否被视为等于mary
。它也可以是重音敏感或非重音,它指定Munchen
是否等于München
。
要使Munchen
与München
匹配,所需的只是对该列使用Accent Insensitive排序规则,例如:
create table Cities (
id int identity primary key,
Name nvarchar(200) COLLATE Latin1_General_CI_AI ,
INDEX IX_Cities_NAME (Name)
)
insert into Cities (Name)
values ('London'), ('München'), ('Munchen')
select *
from Cities
where Name = N'mUnchen'
结果是:
Name
--------
München
Munchen
我没有把Name
作为主键,因为我无法插入München
和Munchen
,我会得到主键违规