Как выполнить сравнение без учета акцента (например, с é, é, ê и ë) в 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'