PHPIN.NET

 找回密码
 立即注册
查看: 5738|回复: 0

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

[复制链接]

469

主题

31

回帖

5565

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5565
发表于 2021-3-19 10:57:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

            
  1. SELECT `column` from `table` where locate('keyword', `condition`)>0
复制代码


         类似于 java 的 indexOf();不过 locate() 只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0;

        1.2. 指定其实位置:

              
  1. SELECT LOCATE('bar', 'foobarbar',5);  --> 7 (从foobarbar的第五个位置开始查找)
复制代码


2.使用instr()函数 (据说是locate()的别名函数)
      
  1. SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0
复制代码


       唯一不同的是 查询内容的位置不同,见SQL语句中过的keyword

3.使用position()方法,(据说也是locate()方法的别名函数,功能一样)
        
  1. SELECT `column` from `table` where position(‘keyword’ IN `condition`)
复制代码


         不过它不再是通过返回值来判断,而是使用关键字 in

4.使用find_in_set()函数
       如: find_in_set(str,strlist),strlist必须要是以逗号分隔的字符串

    如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N

  1. 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 稍快了一点。(不过这四个函数都不能使用索引)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHPIN.NET ( 冀ICP备12000898号-14 )|网站地图

GMT+8, 2024-10-8 16:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表