SELECT
id,
host_id,
last_value,
prev_value,
clock,
units,
item_key
FROM
monitor_history_data
WHERE
( host_id = 8 AND clock BETWEEN '2022-02-16T10:26:53.031+0800' AND '2022-02-16T11:26:53.031+0800' AND item_key REGEXP '^vfs.fs.size.*,pused]$' )
ORDER BY
clock ASC
今天看大哥写的代码 才知道 原来正则基本所有语言都可以使用
mysql 正则关键字 REGEXP
看一下后端代码
List<MonitorHistoryData> diskList = monitorHistoryDataService.list(new QueryWrapper<MonitorHistoryData>().lambda()
.eq(MonitorHistoryData::getHostId, host.getHostId())
.between(MonitorHistoryData::getClock,beginTime,endTime)
.apply("item_key REGEXP '^vfs.fs.size.*,pused]$'")
.orderByAsc(MonitorHistoryData::getClock));
上句sql就是这个传输的
.apply(“item_key REGEXP ‘^vfs.fs.size.*,pused]$’”)
使用的myatisplus 得apply来传输得 。该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分
返回数据
如果要区分大小写的 需要加入 BINARY 这个关键字
-- 不区分大小写
SELECT * FROM sys_user WHERE sys_user.username REGEXP '^a';
-- 区分大小写
SELECT * FROM sys_user WHERE sys_user.username REGEXP BINARY '^a';
官方文档
之前用得是like 来查的 但是只能匹配前后 不能匹配中间
REGEXP mysql 正则
^ 行首的位置
*
匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。
$ 匹配行末位置