mysql模糊查询
Posted 酒醉三分醒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql模糊查询相关的知识,希望对你有一定的参考价值。
1. field like str
2. field regex pattern
3. LOCATE(\'substr\',str,pos)
4. POSITION(\'substr\' IN `field`)方法
5. INSTR(`str`,\'substr\')方法
6. FIND_IN_SET(str1,str2):
1. like
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL提供了四种匹配模式:
1) % :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE \'%三%\'
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE \'%三%\' AND u_name LIKE \'%猫%\'
若使用 SELECT * FROM [user] WHERE u_name LIKE \'%三%猫%\'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
2) _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
比如 SELECT * FROM [user] WHERE u_name LIKE \'_三_\'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE \'三__\';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;
3) like可以利用字符串前缀索引
参见:https://www.cnblogs.com/GT_Andy/archive/2009/12/25/1921914.html
2. REGEXP正则表达式
如果要区分大小写,应该使用BINARY关键字,如where xxx REGEXP BINARY \'Hello.000\'
SELECT column_list FROM table_name WHERE string_column REGEXP pattern
下表说明了正则表达式中一些常用的元字符和构造。
^ | 匹配搜索字符串开头处的位置 |
$ | 匹配搜索字符串末尾的位置 |
. | 匹配任何单个字符 |
[…] | 匹配方括号内的任何字符 |
[^…] | 匹配方括号内未指定的任何字符 |
匹配p1或p2模式 | 匹配p1或p2模式 |
* | 匹配前面的字符零次或多次 |
+ | 匹配前一个字符一次或多次 |
{n} |
匹配前几个字符的n个实例 |
{m,n} | 从m到n个前一个字符的实例匹配 |
举例:
查询名字中包含100或200的名字:SELECT * FROM my_user WHERE `name` REGEXP \'100|200\';
查询以“韩”字开头的名字:select * from my_user where name regex \'^韩\'
为了匹配\\本身,需要使用\\\\\\。在一般情况下正则表达式的转义加一个“\\”就可以了,在mysql中需要加两个。
^有两个用法,一个是非,一个是文本的开始,用[]中表示非,否则是文本的开始。
参见:https://www.yiibai.com/mysql/regular-expression-regexp.html
https://www.cnblogs.com/hider/p/9121704.html
3. LOCATE(\'substr\',str,pos)方法
返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。如果pos存在,返回 substr 在 str 第pos个位置后第一次出现的位置,如果 substr 在 str 中不存在,返回值为0。
SELECT LOCATE(\'xbar\',`foobar`); ###返回0
4. POSITION(\'substr\' IN `field`)方法
position可以看做是locate的别名,功能跟locate一样
5. INSTR(`str`,\'substr\')方法
SELECT `column` FROM `table` WHERE INSTR(`field`, \'keyword\' )>0
6. FIND_IN_SET(str1,str2):
返回str2中str1所在的位置索引,其中str2必须以","分割开。(字段内容必须以“,”隔开才能匹配)
SELECT * FROM `person` WHERE FIND_IN_SET(\'apply\',`name`);
结果:
参见:https://www.cnblogs.com/chaobest/p/6737901.html
以上是关于mysql模糊查询的主要内容,如果未能解决你的问题,请参考以下文章