Сравнение строк, которое игнорирует специальные символы Юникода - PullRequest
0 голосов
/ 13 марта 2019

У меня есть таблица с названиями городов на разных языках. Эти имена часто содержат символы, такие как é, ü и т. Д. Я создаю функцию поиска, чтобы пользователь мог искать имя, но я хотел бы, чтобы это игнорировало все специальные символы и рассматривало их как буквы из Вместо этого английский 26-буквенный алфавит.

Например, запрос на имя munchen должен соответствовать значению München. Запрос преобразует обе стороны сравнения в 26-буквенный алфавит без учета регистра, и , затем выполняет сравнение.

Есть ли прямой способ достичь этого?

1 Ответ

2 голосов
/ 13 марта 2019

Эти персонажи не особенные. Сопоставление и порядок зависят от параметров сортировки столбца - здесь указывается порядок сортировки и какие символы совпадают.

Параметры сортировки могут быть чувствительными к регистру или нет, что указывает, считается ли Mary равным mary. Он также может быть чувствительным к accent или нет, который указывает, равен ли 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, я получил бы нарушение первичного ключа

...