鍍金池/ 問答/數(shù)據(jù)庫/ mysql語句%和=執(zhí)行結(jié)果的區(qū)別

mysql語句%和=執(zhí)行結(jié)果的區(qū)別

SELECT count(1) FROM media_info where media_id = '%'+'bb'+'%'

SELECT count(1) FROM media_info where media_id like CONCAT('%','bb','%')

今天在做統(tǒng)計的時候突然發(fā)現(xiàn)了這個問題。關(guān)于%拼接的問題。

數(shù)據(jù)庫返回的數(shù)據(jù)條數(shù)竟然不一致。而且還驚奇的發(fā)現(xiàn) 第一條語句返回的結(jié)果中有些并不存在bb關(guān)鍵字,想問這種差異是怎么產(chǎn)生的,一般情況我們進(jìn)行模糊查詢時,用那種方式,謝謝了呢。

回答
編輯回答
陌離殤

后來自己根據(jù)一樓做了測試,首先執(zhí)行了一下兩個語句
SELECT * FROM media_info WHERE media_id = 0

SELECT * FROM media_info WHERE media_id = '%'+'bb'+'%'

發(fā)現(xiàn)結(jié)果相同,業(yè)績證實了,@范捷琦Jackie的說法是正確的,在這樣情況下會將media強(qiáng)制轉(zhuǎn)化為為0整數(shù),而【'%'+'bb'+'%'】這個值也是為零的。然后我又做了一下測試【SELECT * FROM media_info WHERE media_id =1】,然后發(fā)現(xiàn)匹配出來的是media_id以1開頭的數(shù)據(jù),所以猜測應(yīng)該是,【當(dāng)利用=進(jìn)行整數(shù)判斷時,會根據(jù)你所匹配的值,來進(jìn)行首字母匹配對應(yīng)的數(shù)據(jù)】

2017年12月14日 04:19
編輯回答
萌小萌

首先,('%'+'bb'+'%')沒啥意義,其結(jié)果為0。它跟字符串做等于比較時,字符串media_id會強(qiáng)制轉(zhuǎn)化為整數(shù),除非這個字符串是'1',轉(zhuǎn)化下來1才不等于0,否則media_id總會是轉(zhuǎn)化為0,所以不能這么用。
你可以具體試試:

SELECT 
'' = ('%'+'g'+'%'),
'a' = ('%'+'g'+'%'),
'abc' = ('%'+'g'+'%'),
'1' = ('%'+'g'+'%')
;

做模糊查詢,只能用你列的第二種方式。

2017年9月10日 07:29