Ответ 1
Вы можете сделать свой регистр запросов чувствительным, используя ключевое слово COLLATE
.
SELECT A
FROM MyTbl
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef'
У меня есть эта база данных:
abcDEF
ABCdef
abcdef
если я пишу: select * from MyTbl where A='ABCdef'
как получить: ABCdef
и как получить:
abcDEF
ABCdef
abcdef
Заранее спасибо
забыл написать - sqlCE
Вы можете сделать свой регистр запросов чувствительным, используя ключевое слово COLLATE
.
SELECT A
FROM MyTbl
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef'
Если у вас есть abcDEF, ABCdef, abcdef уже в базе данных, тогда он уже чувствителен к регистру или у вас нет ограничений.
Вам нужно будет добавить COLLATE
с обеих сторон, чтобы убедиться, что он действительно чувствителен к регистру (для нечувствительной к регистру базы данных), которая приведет к недействительности использования индекса
SELECT TheColumn
FROM MyTable
WHERE TheColumn COLLATE Latin1_General_CS_AS = 'ABCdef' COLLATE Latin1_General_CS_AS
А как насчет акцентов? Latin1_General_CS_AI
, Latin1_General_Bin
?
Все о сортировке. Каждый из них имеет суффикс (CI и CS, что означает нечувствительность к регистру и чувствительность к регистру).
SQL по умолчанию не чувствителен к регистру, поэтому при выполнении простого сравнения строк вы получите все три элемента. Чтобы сделать его чувствительным к регистру, вы можете указать значение поля и значение вашего поиска как varbinary:
SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))
Вышеприведенное предполагает, что ваше поле varchar имеет размер 20. Для nvarchar double it (спасибо @ps2goat).
Попробуйте просто добавить бинарное ключевое слово после where
:
select * from MyTbl where binary A = 'ABCdef';