mysql中有个函数 replace ,可以将指定内容中的某字符替换为另一字符
hive中对应的函数为 regexp_replace
此外mysql和hive都可以使用like、regexp来进行条件匹配
内容大纲
1 select字段中直接替换
1.1 替换字段中的英文逗号为中文逗号
SELECT
concat( '\"', REPLACE ( a, ',', ',' ), '\"' ) AS c,
concat( '\"', REPLACE ( b, ',', ',' ), '\"' ) AS d
FROM
( SELECT 'aaa,111' AS a, 'bbb,222' AS b ) t
# 常用替换语句
concat('\"',regexp_replace(content,',',','),'\"') -- hive
concat('\"',replace(content,',',','),'\"') -- mysql
1.2 删除字段中的换行回车
上图命令:
replace(replace(content,CHAR(10),''),CHAR(13),'') -- mysql,去除换行和回车
关于char()代表的意思:
在任意编辑器 (包含vim) 中,ALT+小键盘数字可以看效果
如:ALT+10 松开ALT 可以看到换行效果
1.3 综合上述,先替换英文逗号,再删除回车换行
concat('\"',regexp_replace(content,',',','),'\"') -- hive,替换英文逗号,字段首末加双引号
concat('\"',replace(content,',',','),'\"') -- mysql,替换英文逗号,字段首末加双引号
replace(replace(content,CHAR(10),''),CHAR(13),'') -- mysql,去除换行和回车
# 组合后如下
# mysql语句中 ,替换英文逗号,字段首末加双引号,再去除换行和回车
replace(replace(concat('\"',replace(content,',',','),'\"'),CHAR(10),''),CHAR(13),'')
# hive语句中,替换英文逗号,字段首末加双引号,再去除换行和回车
regexp_replace(regexp_replace(concat('\"',regexp_replace(content,',',','),'\"'),CHAR(10),''),CHAR(13),'')
2 where条件中正则模糊匹配
2.1 like查询
mysql 和 hive 都可以使用like模糊匹配,like使用很简单,只需要用百分号 % 替换掉不重要的部分即可,例如:
此外还可以使用 not like 进行取反判断,例如:
但有时候like不能完全满足我们的需求, 例如一些多值、不易列举的要求
这时候就需要使用更加强大的正则表达式来进行匹配了
2.2 正则匹配
myql 和hive都可以使用regexp 来执行正则匹配 ,可以更方便的筛选出所需数据
如果这个用not like来实现的话,就得整理出所有包含“0”的8位数,并将其通过and语句依次not like,这显然是不可能的。