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 = '[email protected]' COLLATE SQL_Latin1_General_CP1_CI_AS
Я нашел другое решение в другом месте; то есть использовать
upper(@yourString)но все здесь говорят, что в SQL Server это не имеет значения, потому что он все равно игнорирует case? Я уверен, что наша база данных чувствительна к регистру.
нет, только с помощью
LIKEне будет работать.LIKEищет значения, соответствующие именно вашему заданному шаблону. В данном случаеLIKEнашел бы только текст "sOmeVal", а не "someval".практическое решение использует .
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.
Comments