SQL Server查询区分大小写

时间:2010-08-02 11:46:29

标签: sql sql-server sql-server-ce case-sensitive

我有这个数据库:

abcDEF

ABCdef

abcdef

如果我写:select * from MyTbl where A='ABCdef'

如何获得:ABCdef

以及如何获得:

abcDEF

    ABCdef

    abcdef

提前致谢

忘了写 - sqlCE

5 个答案:

答案 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_AILatin1_General_Bin

答案 2 :(得分:1)

这一切都与整理有关。每个都有一个后缀(CI和CS,意思是Case Insensitive和Case Sensitive)。

http://www.databasejournal.com/features/mssql/article.php/10894_3302341_2/SQL-Server-and-Collation.htm

答案 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';