2010-08-02 509 views
19

我有這個數據庫:的SQL Server查詢區分大小寫

abcDEF 

ABCdef 

abcdef 

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

如何獲得:ABCdef

,以及如何獲得:

abcDEF 

    ABCdef 

    abcdef 

在此先感謝

忘了寫 - sqlCE

+3

大寫/ Lowecase,不是大/小。 – Oded 2010-08-02 11:50:07

回答

32

您可以通過使用COLLATE關鍵字使您的查詢大小寫敏感。

SELECT A 
FROM MyTbl 
WHERE A COLLATE Latin1_General_CS_AS = 'ABCdef' 
+0

感謝您的幫助,如何在sqlCE上做到這一點? – Gold 2010-08-03 06:59:20

1

SQL是不區分大小寫的默認,所以你會得到所有三個項目,如果做一個簡單的字符串比較。要使它區分大小寫的,你可以施展領域的價值和你的搜索價值爲varbinary:

SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20)) 

上述假定您的varchar字段在20的尺寸適用於nvarchar的一倍(感謝@ ps2goat)。

+2

-1喔。這是最差的答案 - 取出所有索引,強制進行表掃描,並完全忽略能夠更改排序規則的現實;) – TomTom 2010-08-02 11:55:51

+3

@TomTom - 使用COLLATE表示索引將不會被使用。 – 2010-08-02 12:05:13

+2

我敢肯定,有更糟的答案 - 至少功能的查詢。根據我的理解,除非您進行二進制比較,否則無法使用索引指定不區分大小寫。我從來沒有嘗試過,但如果你的表列被定義爲一個VARBINARY,你可以做一個索引,只需要投射你的搜索字符串。 – 2010-08-02 13:19:59

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

1

試試這只是where之後添加二進制關鍵字:

select * from MyTbl where binary A = 'ABCdef';