0

我有一张桌子,上面有各种语言的城市名称。这些名称通常包含诸如等字符éü我正在构建一个搜索功能,以便用户可以搜索名称,但我希望这忽略所有特殊字符,并将它们视为英文 26 字母字母表中的字母.

例如,对 name 的查询munchen应该与 value 匹配München。该查询将比较的两边转换为不区分大小写的 26 个字母,然后执行比较。

有没有一种简单的方法来实现这一目标?

4

1 回答 1

2

这些字符在任何方面都不是特别的。匹配和排序受列排序规则的影响 - 这指定排序顺序和匹配的字符。

排序规则可以区分大小写,也可以不区分大小写,它指定是否Mary被视为等于mary。它也可以区分重音,指定是否Munchen等于München

要与 匹配MunchenMü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ünchenMunchen,我会得到主键违规

于 2019-03-13T10:07:48.850 回答