使用SUBSTR与LIKE操作符的两条SELECT语句差异解析
两条SQL语句的差异解析
先把两条SQL语句明确列出来:
SELECT SUBSTR(gram_panchayat,1,6) GP FROM tw_master WHERE gram_panchayat LIKE 'B%';
SELECT gram_panchayat FROM tw_master WHERE gram_panchayat LIKE 'B_____';
二者的核心差异主要体现在以下几个方面:
筛选逻辑不同
第一条语句的WHERE gram_panchayat LIKE 'B%':匹配所有以B开头的gram_panchayat值,不管后续字符有多少,哪怕只有B单个字符也会被选中。
第二条语句的WHERE gram_panchayat LIKE 'B_____':_是LIKE的单字符通配符,这里5个_意味着只匹配以B开头且总长度恰好为6个字符的记录,长度不符的直接被排除。返回结果内容不同
第一条语句返回的是gram_panchayat字段的前6个字符(别名GP)——哪怕原字段长度超过6,也只截取前6位;如果原字段长度不足6,就返回整个字段内容。
第二条语句返回的是gram_panchayat字段的完整值,而且这些值的长度固定是6位(因为筛选条件已经限定了长度)。匹配范围与性能差异
第一条的匹配范围更广,比如B、B123、Babcde、Babcdefgh这类值都符合条件;且LIKE 'B%'可以利用gram_panchayat字段上的前缀索引(如果存在),数据库能快速定位目标记录,性能更优。
第二条的匹配范围严格受限,只有刚好6个字符且以B开头的值才会被选中;虽然也是前缀匹配,但部分数据库对B_____这种带固定长度限制的模式,索引利用效率可能略低于B%。
内容的提问来源于stack exchange,提问作者user21257954
相关产品推荐
相关产品推荐

