今天遇到一個問題,需要對表中的一個類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開頭的兩位數,最后是多位數
- 枚舉值之間使用管道符號
|
來實現或的選擇。