MySQL使用正则表达式比较字段中的数字
今天遇到一个问题,需要对表中的一个类json字段的内容进行筛选,而筛选的条件是值要大于某个值。因为值的位数并不确定,考虑使用正则表达式进行筛选。
字段格式
类json的key-value字段,示例如下:
create table t1 (a varchar(50));
insert into t1 values ('"xx":"30","yy":"9.8"}');
insert into t1 values ('"xx":"20","yy":"9.9"}');
insert into t1 values ('"xx":"60","yy":"9.5"}');
insert into t1 values ('"xx":"90","yy":"10.0"}');
筛选条件
xx后面的值要求大于20,yy后面的值要求大于9.6
最后的筛选语句
select * from t1 where a regexp '^.*"xx":"((2[1-9])|([3-9][0-9])|([1-9][0-9]{2,}))","yy":"((9\.[7-9])|(10\.)).*}$';
说明
- 数字比较采用枚举的方式实现,比如xx,先比较以20开头的2位数,然后是3-9开头的两位数,最后是多位数
- 枚举值之间使用管道符号
|
来实现或的选择。