我有这个数据库:
abcDEF
ABCdef
abcdef
如果我写:select * from MyTbl where A='ABCdef'
如何获得:ABCdef
以及如何获得:
abcDEF
ABCdef
abcdef
提前致谢
忘了写 - sqlCE
答案 0 :(得分:32)
您可以使用COLLATE
关键字使您的查询区分大小写。
SELECT A
FROM MyTbl
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef'
答案 1 :(得分:6)
如果您已经在数据库中使用了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
?
答案 2 :(得分:1)
这一切都与整理有关。每个都有一个后缀(CI和CS,意思是Case Insensitive和Case Sensitive)。
答案 3 :(得分:1)
默认情况下,SQL不区分大小写,因此如果进行简单的字符串比较,您将获得所有三个项目。要使其区分大小写,可以将字段的值和搜索值强制转换为varbinary:
SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))
以上假设您的varchar字段大小为20.对于nvarchar加倍(感谢@ ps2goat)。
答案 4 :(得分:1)
尝试这只是在where
之后添加二进制关键字:
select * from MyTbl where binary A = 'ABCdef';