我有一张桌子,上面有各种语言的城市名称。这些名称通常包含诸如等字符é
。ü
我正在构建一个搜索功能,以便用户可以搜索名称,但我希望这忽略所有特殊字符,并将它们视为英文 26 字母字母表中的字母.
例如,对 name 的查询munchen
应该与 value 匹配München
。该查询将比较的两边转换为不区分大小写的 26 个字母,然后执行比较。
有没有一种简单的方法来实现这一目标?
我有一张桌子,上面有各种语言的城市名称。这些名称通常包含诸如等字符é
。ü
我正在构建一个搜索功能,以便用户可以搜索名称,但我希望这忽略所有特殊字符,并将它们视为英文 26 字母字母表中的字母.
例如,对 name 的查询munchen
应该与 value 匹配München
。该查询将比较的两边转换为不区分大小写的 26 个字母,然后执行比较。
有没有一种简单的方法来实现这一目标?
这些字符在任何方面都不是特别的。匹配和排序受列排序规则的影响 - 这指定排序顺序和匹配的字符。
排序规则可以区分大小写,也可以不区分大小写,它指定是否Mary
被视为等于mary
。它也可以区分重音,指定是否Munchen
等于München
。
要与 匹配Munchen
, München
所需要的只是对该列使用不区分重音的排序规则,例如:
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
,我会得到主键违规