SQL中LIKE匹配模式"a%"与"a%_"的功能差异是什么?
SQL中
r%_与r%的LIKE匹配逻辑差异 核心通配符基础规则
- 下划线
_:严格匹配1个任意字符,无法匹配空内容、不能省略占位 - 百分号
%:匹配0个及以上任意字符,可匹配空后缀
两个模式的实际差异
r%匹配规则
首字符为r的所有字符串,对总长度无限制,长度为1的字符串'r'也可以正常匹配。r%_匹配规则
首字符为r,且总长度至少为2的字符串,末尾的_要求必须存在至少1个额外字符,完全无法匹配长度为1的'r'。
二者是包含关系:r%的匹配结果完全覆盖r%_的所有匹配结果,还额外包含所有长度为1的'r'字符串,功能并不等价。
测试结果一致的原因
你使用的测试数据集里不存在首字符为r且长度为1的样本,因此两个模式返回的结果刚好重合,才会误以为功能一致。
理解偏差点
你默认%已经覆盖了后面的所有字符,忽略了末尾_的强制占位要求:_不会因为前面有%就失效,必须严格占用1个字符的位置。
简单实测参考:假设测试表有值
'r'、'ra'、'rcd'、'tr'
- 执行
LIKE 'r%'返回'r'、'ra'、'rcd'三条结果- 执行
LIKE 'r%_'仅返回'ra'、'rcd'两条结果
内容的提问来源于stack exchange,提问作者user16782053
相关产品推荐
相关产品推荐

