Как выполнить сравнение без учета акцента (например, с é, é, ê и ë) в SQL Server? - PullRequest
61 голосов
/ 17 марта 2010

Я хочу сравнить два varchars в SQL, один из них будет выглядеть как Cafe, а другой Café, есть ли способ в SQL, который позволит сравнивать два значения. Например:

SELECT *
FROM Venue
WHERE Name Like '%cafe%'

То есть, если есть место с именем Big Bobs Café Extraordinaire, оно будет включено в набор результатов?

Ответы [ 4 ]

91 голосов
/ 17 марта 2010

Принуждение к нечувствительному к акценту сопоставлению

Вам также необходимо убедиться, что обе стороны имеют одинаковые параметры сортировки, чтобы избежать ошибок или дальнейшего принуждения, если вы хотите сравнить с табличной переменной или столбцом временной таблицы varchar

и поскольку постоянное значение будет иметь параметры сортировки базы данных Обновление: только для локальных переменных, а не для констант Нет, даже тогда

SELECT *
FROM Venue
WHERE
   Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
46 голосов
/ 17 марта 2010

Применяя определенный нечувствительный к акценту сопоставление для вашего выбора:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI

CI означает «нечувствителен к регистру», а AI - «нечувствителен к акценту».

5 голосов
/ 22 сентября 2017

Accent Sensitive и Accent Insensitive search можно получить с помощью Latin1_general_CI_AI

Здесь AI для нечувствительного к акценту и AS для чувствительного к акценту т. е. Café и Cafe одинаковы при нечувствительности к акценту.

В приведенном ниже запросе Latin1_general_CI_AI можно разбить на следующие части.

  • latin1 заставляет сервер обрабатывать строки, используя кодировку latin 1, в основном ascii.

  • CI указывает без учета регистра, поэтому «ABC» равно «abc».

  • AI определяет нечувствительный к акценту, поэтому 'ü' равно 'u'.

Ваш запрос должен выглядеть следующим образом:

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

Ожидаемый Результат выглядит следующим образом:

 Id  name
 1  Café
 2  Cafe
1 голос
/ 01 июня 2017

если 'A' COLLATE SQL_Latin1_General_CP1_CS_AS = 'a' COLLATE SQL_Latin1_General_CP1_CS_AS SELECT N'Yes ' ELSE SELECT N'No '

...