喵星之旅-狂奔的兔子-MySQL实现like in功能,MySQL中正则表达式(REGEXP)使用

前言

有时候使用MySQL进行数据库查询数据的时候,like查询存在局限性,这时候就可以使用MySQL中的正则表达式查询的方式。
正则表达式本身这里不做介绍。
MySQL中不能同时使用like in关键字
like 模糊查询关键字
in 多条件查询关键字
like in 理论上实现的是就是多条件查询,但是Mysql的语法并不支持该实现,因此有些需求想要实现like in 的效果,只能通过大量子查询实现 ,而且实现的效果功能非常不智能。

LIKE和REGEXP的区别

LIKE匹配整个列(like是模糊查询),如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外)
REGEXP在列值内进行匹配,如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)
可以认为like是REGEXP的一种极简单应用。

1
2
3
4
5
6
7
SELECT * from kitty_tablename where name like '钻井工艺';  -- name 值是 ‘钻井工艺’

SELECT * from kitty_tablename where name like '%钻井工艺%';-- name 值包含 ‘钻井工艺’

SELECT * from kitty_tablename where name REGEXP '钻井工艺';-- name 值包含 ‘钻井工艺’

SELECT * from kitty_tablename where name REGEXP '钻井|工艺';-- name 值包含 ‘钻井’ 或者 ‘工艺’

QueryWrapper实现REGEXP

查询条件:
name中包含“bunny”或者“kitty”或者“hehe”
或者head中包含“bunny”或者“kitty”或者“hehe”

1
2
3
4
5
6
7
String contents_new = "bunny|kitty|hehe";
queryWrapper.and(wrapper ->wrapper
.apply(" name REGEXP {0} ", contents_new)
.or()
.apply(" head REGEXP {0} ",contents_new)

);
文章目录
  1. 前言
  2. LIKE和REGEXP的区别
  3. QueryWrapper实现REGEXP
|