起因
在学习《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
我的MS SQL2008中得到的结果是你想要的,_匹配一个!(select * from Student where username like '刘__'结果只匹配两个,sql不同版本语法不一样吧!)