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

mysql語(yǔ)句%和=執(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)計(jì)的時(shí)候突然發(fā)現(xiàn)了這個(gè)問題。關(guān)于%拼接的問題。

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

回答
編輯回答
陌離殤

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

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

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

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

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

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

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

2017年9月10日 07:29