我有這個數據庫:的SQL Server查詢區分大小寫
abcDEF
ABCdef
abcdef
如果我寫:select * from MyTbl where A='ABCdef'
如何獲得:ABCdef
,以及如何獲得:
abcDEF
ABCdef
abcdef
在此先感謝
忘了寫 - sqlCE
我有這個數據庫:的SQL Server查詢區分大小寫
abcDEF
ABCdef
abcdef
如果我寫:select * from MyTbl where A='ABCdef'
如何獲得:ABCdef
,以及如何獲得:
abcDEF
ABCdef
abcdef
在此先感謝
忘了寫 - sqlCE
這一切都是關於整理。每個人都有一個後綴(CI和CS,意思是不區分大小寫,區分大小寫)。
SQL是不區分大小寫的默認,所以你會得到所有三個項目,如果做一個簡單的字符串比較。要使它區分大小寫的,你可以施展領域的價值和你的搜索價值爲varbinary:
SELECT * FROM MyTbl WHERE CAST(A AS varbinary(20)) = CAST('ABCdef' as varbinary(20))
上述假定您的varchar字段在20的尺寸適用於nvarchar的一倍(感謝@ ps2goat)。
-1喔。這是最差的答案 - 取出所有索引,強制進行表掃描,並完全忽略能夠更改排序規則的現實;) – TomTom 2010-08-02 11:55:51
@TomTom - 使用COLLATE表示索引將不會被使用。 – 2010-08-02 12:05:13
我敢肯定,有更糟的答案 - 至少功能的查詢。根據我的理解,除非您進行二進制比較,否則無法使用索引指定不區分大小寫。我從來沒有嘗試過,但如果你的表列被定義爲一個VARBINARY,你可以做一個索引,只需要投射你的搜索字符串。 – 2010-08-02 13:19:59
如果您已經在數據庫中有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
?
試試這只是where
之後添加二進制關鍵字:
select * from MyTbl where binary A = 'ABCdef';
大寫/ Lowecase,不是大/小。 – Oded 2010-08-02 11:50:07