"where name like '陈__'" 的奇怪现象
起因
在学习《SQL学习指南》第68页“匹配条件”时,看到这句话
'_' | 正好匹配一个字符 |
'%' | 任意数目的字符(包括0) |
于是我就想在学生资料表中试一试, 该表有个"sname"列, 保存着学生的全名
目标是找出所有"姓陈的","名字长度为3"的记录
结果
环境: sqlserver2014 win10
select sname
from student
where sname like '陈__'
返回了陈x
和陈xx
格式的名字
结果不对头呀~
'__'并没有正好匹配两个字符, 于是在mysql试了下, 结果都是陈xx
我想确定一下, '__'意思是不是匹配一个或两个, 于是又做了个试验
select sname
from student
where sname like '__博'
返回结果都是xx博
格式的, 我确信数据库中有个叫"陈博"的, 但没有匹配到他,
按照上个实验的逻辑, 应该能匹配到x博
格式的姓名
最后, 我又做了几个实验:
where语句处填写
1
,5
个下划线, 也就是'陈_', '陈_____' 的返回结果是一样的, 都陈x
格式的where语句处填写
2
,3
,4
个下划线, 结果是一样的, 都是陈xx
或陈x
格式的
看官们...能帮忙解惑么(是不是有点钻牛角尖啦~)
还是通过其他方法使查询达到了目标, 不过这下划线问题还是一个梗
select sname
from student
where sname like '陈__'
and len(sname) = 3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我的MS SQL2008中得到的结果是你想要的,_匹配一个!(select * from Student where username like '刘__'结果只匹配两个,sql不同版本语法不一样吧!)
sql语法规范各家主流数据库遵守大同小异,但处理方式会有所不同,特别是模糊查询这块,差异比较常见,具体要看使用哪家的数据库,异常之处要参考其使用说明文档。
我的环境是SQL Server2012英文版,返回的结果期望的结果