doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:7129回复:0

MySQL使用内置函数来进行模糊搜索(locate()等)

楼主#
更多 发布于:2017-09-17 21:31

常用的一共有4个方法,如下:
1. 使用locate()方法


       1.1.普通用法:
             SELECT `column` from `table` where locate('keyword', `condition`)>0
        类似于 java 的 indexOf();不过 locate() 只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0;
       1.2. 指定其实位置:
              SELECT LOCATE('bar', 'foobarbar',5);  --> 7 (从foobarbar的第五个位置开始查找)

2.使用instr()函数 (据说是locate()的别名函数)

     SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0
      唯一不同的是 查询内容的位置不同,见SQL语句中过的keyword

3.使用position()方法,(据说也是locate()方法的别名函数,功能一样)
        SELECT `column` from `table` where position(‘keywordIN `condition`)
        不过它不再是通过返回值来判断,而是使用关键字 in

4.使用find_in_set()函数

      如: find_in_set(str,strlist),strlist必须要是以逗号分隔的字符串
   如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N

SQL> SELECT FIND_IN_SET('b','a,b,c,d');
 +---------------------------------------------------------+
| SELECT FIND_IN_SET('b','a,b,c,d') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec)

   总结: locate、position 和 instr 的差別只是参数的位置不同,同时locate 多一个起始位置的参数外,两者是一样的。
             find_in_set()是个比较特殊的存在,但它们都是返回要查找的子字符串 在 指定字符串中的位置。
             速度上前3个比用 like 稍快了一点。(不过这四个函数都不能使用索引,这是个遗憾)


转自:http://www.cnblogs.com/tommy-huang/p/4483583.html
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号