2010-01-10 106 views
1

可能重複:How to apply wildcard in instr() in MySQL?如何在MySQL的instr()中使用區分大小寫?

可能重複鏈接顯示查詢這也正是像我目前的一個排序。不過,我找不到辦法讓它成爲敏感的搭配。 :\

SELECT COUNT(*) FROM users WHERE INSTR(flags, 'T') > 0; 

我得到46這顯然是錯誤的計數。它將標記的每個實例「T」計數爲大寫還是小寫。

它按照MySQL文檔工作。我在MySQL文檔中發現了一些說在變量上放置「@」符號使其成爲區分大小寫的匹配項的東西。然而,我在@'T'上試過這樣的查詢:

SELECT COUNT(*) FROM users WHERE INSTR(flags, @'T') > 0; 

我得到一個零計數。

任何人都可以爲我闡明這一點嗎? :)

編輯:

忘了提,不好意思。我還嘗試了一個LIKE '%T%'作爲where子句,它仍然失敗並返回相同的(INSTR(flags, 'T') > 0);

+0

也許你可以發佈你的示例'flags'值,所以我們可以測試它。 – cmptrgeekken 2010-01-10 05:34:14

+0

'flags'就像是「TkKp」,其中「T」就是我所匹配的。 「T」爲小寫字母的示例字符串是:「AKkRBbagSsPpCtmxeGhUX」 – Zack 2010-01-10 05:36:41

+0

我試圖計算我的表中有多少條目具有特定字段包含「T」。 – Zack 2010-01-10 05:38:52

回答

2

測試,

SELECT binary 'AKkRBbagSsPpCtmxeGhUX' LIKE '%T%'; 

產生 '0',符合市場預期。根據String Comparison文檔,如果其任一操作數是二進制的,則LIKE執行二進制(因此區分大小寫)比較。

2

我相信這會工作

SELECT COUNT(*) FROM users WHERE INSTR(binary flags, 'T') > 0; 
+0

嗯。沒有工作,因爲它返回了5的計數仍然不正確:( – Zack 2010-01-10 05:30:25

+1

你提到嘗試'LIKE',你試過'二進制標誌LIKE'%T%''或者''二進制標誌LIKE二進制'%T%' ' – 2010-01-10 05:43:02

+0

+1在這裏工作得很好,在v5.5 – virtualeyes 2013-08-22 13:55:34