SQL server игнорирует регистр в выражении where

Как создать SQL-запрос (MS SQL Server), где предложение "where" не учитывает регистр?

SELECT * FROM myTable WHERE myField = 'sOmeVal'

Я хочу, чтобы результаты вернулись, игнорируя случай

6 ответов


в конфигурации базы данных SQL Server по умолчанию сравнение строк are регистр. Если база данных переопределяет этот параметр (с помощью альтернативных параметров сортировки), необходимо указать, какие параметры сортировки следует использовать в запросе.

SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS

обратите внимание, что параметры сортировки, которые я предоставил, - это просто пример (хотя он, скорее всего, будет работать просто отлично для вас). Более подробное описание параметров сортировки SQL Server можно найти здесь.


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

SELECT balance FROM people WHERE email = 'billg@microsoft.com'
  COLLATE SQL_Latin1_General_CP1_CI_AS 

Я нашел другое решение в другом месте; то есть использовать

upper(@yourString)

но все здесь говорят, что в SQL Server это не имеет значения, потому что он все равно игнорирует регистр? Я уверен, что наша база данных чувствительна к регистру.


нет, только с помощью LIKE не будет работать. LIKE поиск значений, соответствующих именно вашей модели. В этом случае LIKE найдет только текст "sOmeVal", а не "someval".

решение pracitcable с помощью . LCASE('sOmeVal') получает строчную строку вашего текста: "someval". Если вы используете эту функцию для обеих сторон вашего сравнения, это работает:

SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')

оператор сравнивает две строчные строки, так что ваш "sOmeVal" будет соответствовать всем другим обозначениям "someval" (например, "Someval", "sOMEVAl" и т. д.).


вы можете заставить регистр чувствительным, бросая в varbinary вот так:

SELECT * FROM myTable 
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal')

какой базе ты? С MS SQL Server это параметр для всей базы данных, или вы можете использовать его для каждого запроса с ключевым словом COLLATE.