SQL的模糊匹配区别---like,rlike,regexpx

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL的模糊匹配区别---like,rlike,regexpx相关的知识,希望对你有一定的参考价值。

参考技术A 原文链接: https://blog.csdn.net/ZZQHELLO2018/java/article/details/92794555

一、主要区别
1)like的内容不是正则,而是通配符。像mysql中的"like",但是建议使用高级函数"instr"效率更高。

(2)rlike的内容可以是正则,正则的写法与java一样。需要转义,例如’\m’需要使用’\m’

(3)regexp == rlike 同义词 not like not regexp

二、Like常用方法
1.like关键字
like有两个模式:_和%

_:表示单个字符,用来查询定长的数据

%:表示0个或多个任意字符

2.示例

三、Mysql中Regexp常见用法
模糊匹配,包含特定字符串

模糊匹配,以特定字符串开头

模糊匹配,以特定字符串结尾

模糊匹配 或关系

模糊匹配,不包含单个字符

这个结果跑出来一看大吃一惊,竟然把所有记录给跑出来,这是为什么呢?
因为一旦加了这个方括号"[]",它就把里面的内容拆成单个的字符再匹配,它会逐个字符去匹配判断是不是等于“车”,或者是不是等于“友“,返回的结果是一组0、1的逻辑值。

如果想匹配不包含特定字符串,该怎么实现呢?

模糊匹配,不包含特定字符串

mysql正则查询 模糊查询

-- ==============正则查询================
/*
SQL默认是忽略大小写的
正则模式使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。正则即字段值包含正则的内容即可
.      匹配任何单个的字符,表示任意单字符
[...]  匹配包含方括号内某单个字符的字符串,[0-9]匹配0到9之间的某个数字
*      匹配零个或多个在它前面的字符
{n}    匹配n个在它前面的字符

如果希望大小写都匹配上可以这样写。[aA] 匹配大小写的 a,[a-zA-Z] 则匹配大小写的任何 a-z 单个字母。
但默认是不区分大小写的 [b] 也可匹配上还有 B 的字符串
要匹配的字符在字段起始处,使用 ^ ,在字段的结尾用 $
如果是中文字符,可能在使用时需要注意一下。

*/
-- 字段name只有四个值,name_aA ,name_aB , name_人人 ,name_%好好_

SELECT * FROM `test_t` WHERE NAME REGEXP [a-z];     -- 包含a到z某个字符的字符串,能匹配到 name_aA 和 name_aB 和 name_人人 和 name_%好好_

SELECT * FROM `test_t` WHERE NAME REGEXP ^n.....b$; -- 以n开头B结尾,7个字符长度的字符串,能匹配到 name_aB

SELECT * FROM `test_t` WHERE NAME RLIKE d*;        -- 包含0个或多个d的字符串,能匹配到该字段的所有值,因为 * 前的字符0个也匹配

SELECT * FROM `test_t` WHERE NAME RLIKE B{1}$;     -- 结尾是一个B,能匹配到name_aB






-- ==============模糊查询================
-- MySql的like语句中的通配符:百分号、下划线和escape

-- %    表示任意个或多个任意字符。可匹配任意类型和长度的字符。

SELECT * FROM `test_t` WHERE NAME LIKE %me_aB; -- 查询结果 name_aB

-- 如果需要找出 name 中既有 b 又有 a 的记录,使用 and 条件
SELECT * FROM `test_t` WHERE NAME LIKE %b% AND NAME LIKE %a%;
-- 若使用 SELECT * FROM `test_t` WHERE NAME LIKE ‘%b%a%‘; 则找不到 name_aB



-- _    表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句(可以代表一个中文字符)

SELECT * FROM `test_t` WHERE NAME LIKE _______; -- 能查询到 name_aA 和 name_aB 还有 name_人人 这7个字符长度的值

-- 如果要查字符 % 或者 _ 使用 ESCAPE,转义字符后面的 % 或 _ 就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用
SELECT * FROM `test_t` WHERE NAME LIKE name_/%%好/_ ESCAPE /; -- 查询结果 name_%好好_

 

以上是关于SQL的模糊匹配区别---like,rlike,regexpx的主要内容,如果未能解决你的问题,请参考以下文章

HiveQL

hive正则匹配like,rlike,regexp,regexp_replace,regexp_extract

在SQL数据库中怎样实现模糊查找匹配。

mysql模糊匹配查询like,regexp,in

SQL like 模糊查询

Hbase能模糊查询吗,类似like