1、在postgre数据库中通过正则将2千万数据中的字符给提取出来:
select * from 表名 where 字段名 ~'[\u2e80-\ua4cf]|[\uf900-\ufaff]|[\ufe30-\ufe4f]|[\^A-Z]|[\^a-z]|[\^0-9]|[\^a-z0-9A-Z]'
注释:
[\^a-z0-9A-Z]: a-z:小写字母、0-9数字、A-Z大写字母 ^ 表示从开头开始匹配,\表示原义匹配
[\^A-Z]:表示匹配大写字母
[\^a-z]:表示匹配小写字母
[\^0-9]:表示匹配数字
[\u2e80-\ua4cf]|[\uf900-\ufaff]|[\ufe30-\ufe4f]:表示匹配当前字段内容中的特殊符号,如:
上面的sql需要优化,如果数据量小,没问题,如果数据量大,跑起来特别的慢,需要稍微更改下sql:
select * from
(
select 表名1,表名2,表名3 ~'[\u2e80-\ua4cf]|[\uf900-\ufaff]|[\ufe30-\ufe4f]|[\^A-Z]|[\^a-z]|[\^0-9]|[\^a-z0-9A-Z]' as 虚拟列名4 from 表名
) as a where 虚拟列名4 ='f'
#sql注释:f意思是false的意思,虚拟列名4这一列表示的是bool类型,值为true和false,所以虚拟列名4可以等于‘f’或者是‘t’,意思是把虚拟列4这一列把值为false的都筛选出来。