2019-01-28SQL的通配符冲突的处理
2019-01-28 本文已影响0人
lyx_lyx
表结构描述:当前有一张表,此处假定node_info,存在一个字段node_path是由 ‘字母’、‘数字’ 及 ‘下划线_’组成,如:abc_1_de_f。
需求:查询所有node_path以‘abc_’开头的记录
这个问题,自然而然的就想到,很简单,直接like % 模糊匹配就OK:
SELECT * FROM mode_info WHERE node_path LIKE 'abc_%'
运行,发现结果根本就不对,远远超过预期。不仅abc_开头的被查出来,abcd开头等等的也被查询命中。后来想了一下,突然记起'_'是通配符,也就是通常所说的占位符。而通配符大家都知道,会匹配所有单一字符。所以也就意味着,上面的那个sql,会匹配到所有node_path长度大于等于4,且以abc开头的所有记录。
那么,上面的需求该怎么实现呢。很简单:只要避免‘_’在此处作为通配符存在即可。如何避免呢,那就需要用到另外一个通配符'[]'。修改sql:
SELECT * FROM mode_info WHERE node_path LIKE 'abc[_]%'
至此处,问题已解决。