hive之字符串替换函数translate

translate介绍

String Functions

Return TypeName(Signature)Description
stringtranslate(string input, string from, string to)Translates the input string by replacing the characters present in the from string with the corresponding characters in the to string. This is similar to the translate function in PostgreSQL. If any of the parameters to this UDF are NULL, the result is NULL as well. (Available as of Hive 0.10.0, for string types) Char/varchar support added as of Hive 0.14.0.
stringregexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)Returns the string resulting from replacing all substrings in INITIAL_STRING that match the java regular expression syntax defined in PATTERN with instances of REPLACEMENT

这里拿translate函数和regexp_replace进行了对比。简答来说,对字符串进行替换操作时,可以选用translate和regexp_replace,不过它们的原理和具体含义不太相同,下面会一一解析。

translate函数测试

//sql1
select TRANSLATE('abcdef-abcdef','abcd','1234');
_co
1234ef-1234ef
//sql2
select TRANSLATE('abcdef-abcdef','ace','123');
_co
1b2d3f-1b2d3f

结论:translate(input, from, to)
from这里是你想要替换的字符,而不是字符串,to 即想用哪些字符替换或者删除,而且两个里面的字符是一一对应的;

//sql3
select TRANSLATE('abcdef-abcdef','abcd','123');
_co
123ef-123ef
//sql4
select TRANSLATE ('abcdaabbaaabbb','aa','12');
_co
1bcd11bb111bbb
//sql5
select TRANSLATE ('abcdaabbaaabbb','a','123');
_co
1bcd11bb111bbb

结论:
01.如果 from 字符串长度>to的字符串长度,from中多余的字段会被删除(替换为"")
02.from里有重复字符,重复的对应to的替换不会起作用;
03.from长度<to的长度,不报错但是to里面长的字符没有意义;

需求

删除字符串"ABCDEFGHIOUUFEBCAADDEEII",中的元音字符,也就是出现在该字段中包含"AEIOU"任意一个字符都需要删除掉。
实现1:

select TRANSLATE ('ABCDEFGHIOUUFEBCAADDEEII','AEIOU','');
_co	
BCDFGHFBCDD

实现2:

select regexp_replace ('ABCDEFGHIOUUFEBCAADDEEII','A|E|I|O|U','');
_co	
BCDFGHFBCDD
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值