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

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

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

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

4 ответа

Решение

Привести к нечувствительной к сличению сортировке

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

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

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

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

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

CI означает "нечувствительный к регистру", а AI - "нечувствительный к акценту".

Accent Sensitive и Accent Insensitive search можно использовать с помощью Latin1_general_CI_AI

Вот AI для Accent Insensitive и AS для Accent Sensitive, т. е. Café и Cafe одинаковы, если Accent Insensitive.

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

  • latin1 заставляет сервер обрабатывать строки, используя charset 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

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

Другие вопросы по тегам