2) _ 通配符:
– 查询以“网”为结尾的,长度为三个字的数据,如:“链家网”,
SELECT * from app_info where appName like ‘__网’;
注意:’%__网、__%网’ 等同于 '%网’
– 查询前三个字符为XX网,后面任意匹配,如:“城通网盘、模具网平台”
SELECT * from app_info where appName like ‘__网%’;
– 模糊匹配含有“xx网x车xxx”的数据,如:“携程网约车客户端”
SELECT * from app_info where appName like ‘__网_车%’;
注意事项:
- 注意大小写,在使用模糊匹配时,也就是匹配文本时,MySQL默认配置是不区分大小写的。当你使用别人的MySQL数据库时,要注意是否区分大小写,是否区分大小写取决于用户对MySQL的配置方式.如果是区分大小写,那么像Test12这样记录是不能被"test__"这样的匹配条件匹配的。
- 注意尾部空格,"%test"是不能匹配"test "这样的记录的。
- 注意NULL,%通配符可以匹配任意字符,但是不能匹配NULL,也就是说SELECT * FROM blog where title_name like ‘%’;是匹配不到title_name为NULL的的记录。
1-3. 技巧与建议:
正如所见,MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,消耗更多的内存等资源。这里给出一些使用通配符要记住的技巧。
-
不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
-
**在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。**因为MySQL在where后面的执行顺序是从左往右执行的,如果把通配符置于搜索模式的开始处(最左侧),搜索起来是最慢的(因为要对全库进行扫描)。
-
仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。
有细心地朋友会发现,如果数据中有“%”、“_”等符号,那岂不是和通配符冲突了?
SELECT * from app_info where appName LIKE ‘%%%’;
SELECT * from app_info where appName LIKE ‘%_%’;
确实如此,上面面两条SQL语句查询的都是全表数据,而不是带有"%“和”_"的指定数据。这里需要加 ESCAPE 关键字进行转义。
如下,ESCAPE 后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,一般我就写成"/";然后就像 C语言中转义字符一样 例如 ‘\n’,’\t’, 把这个字符写在你需要转义的那个%号前就可以了;
SELECT * from app_info where appName LIKE ‘%/_%’ ESCAPE ‘/’;
但是这种情况有没有更高端点的解决办法呢?能让检查你代码的同事或领导对你刮目相看那种~~
当然,下面我们就来看看MySQL的第二类模糊匹配方式 — 内置函数查询
二、MySQL内置函数检索(locate,position,instr)
====================================
话接上文,通过内置函数locate,position,instr进行匹配,相当于Jav