正则匹配纯数字(Oracle、Postgresql、Hive)
工作中遇到一个场景,需要匹配查询出全是数字的记录,是在GP里,这里针对几种数据库做一个总结。
三种数据库的原始数据相同:一共13条数据,三条比较特殊的,income值为'renmin','人民'和null一、Postgresql中如何匹配
select * from salary_2020 where income ~'^-?(\d*.\d*)$';
select * from salary_2020 where income ~'^-?([[:digit:]]*.[[:digit:]]*)$';
select * from salary_2020 where income ~'^-?([0-9]*.[0-9]*)$';
查询结果23条数据,过滤掉了income的特殊值的3条记录
二、Oracle中如何匹配
select * from scott.salary_2020 where regexp_like(income,'^-?([[:digit:]]*.[[:digit:]]*)$');
select * from scott.salary_2020 where regexp_like(income,'^-?(\d*.\d*)$');
select * from scott.salary_2020 where regexp_like(income,'^-?([0-9]*.[0-9]*)$');
结果如下:
三、Hive中如何匹配
select * from salary_2020 where income regexp '^-?(\\d*.\\d*)$';
select * from salary_2020 where income regexp '^-?([0-9]*.[0-9]*)$';
结果如下:
总结
三者对“\”的识别略有差异,注意什么时候会被认为是转义,什么时候是普通字符