为了账号安全,请及时绑定邮箱和手机立即绑定

mysql语句%和=执行结果的区别

mysql语句%和=执行结果的区别

湖上湖 2019-05-14 11:08:04
SELECTcount(1)FROMmedia_infowheremedia_id='%'+'bb'+'%'SELECTcount(1)FROMmedia_infowheremedia_idlikeCONCAT('%','bb','%')今天在做统计的时候突然发现了这个问题。关于%拼接的问题。数据库返回的数据条数竟然不一致。而且还惊奇的发现第一条语句返回的结果中有些并不存在bb关键字,想问这种差异是怎么产生的,一般情况我们进行模糊查询时,用那种方式,谢谢了呢。
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

首先,('%'+'bb'+'%')没啥意义,其结果为0。它跟字符串做等于比较时,字符串media_id会强制转化为整数,除非这个字符串是'1',转化下来1才不等于0,否则media_id总会是转化为0,所以不能这么用。你可以具体试试:
SELECT
''=('%'+'g'+'%'),
'a'=('%'+'g'+'%'),
'abc'=('%'+'g'+'%'),
'1'=('%'+'g'+'%')
;
做模糊查询,只能用你列的第二种方式。
                            
查看完整回答
反对 回复 2019-05-14
?
千巷猫影

TA贡献1829条经验 获得超7个赞

后来自己根据一楼做了测试,首先执行了一下两个语句SELECT*FROMmedia_infoWHEREmedia_id=0
SELECT*FROMmedia_infoWHEREmedia_id='%'+'bb'+'%'
发现结果相同,业绩证实了,@范捷琦Jackie的说法是正确的,在这样情况下会将media强制转化为为0整数,而【'%'+'bb'+'%'】这个值也是为零的。然后我又做了一下测试【SELECT*FROMmedia_infoWHEREmedia_id=1】,然后发现匹配出来的是media_id以1开头的数据,所以猜测应该是,【当利用=进行整数判断时,会根据你所匹配的值,来进行首字母匹配对应的数据】
                            
查看完整回答
反对 回复 2019-05-14
  • 2 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信