本文主要归纳整理一些在实际的取数过程中所用到的函数,以供以后参考。
1.字符串提取函数
(1)字符串截取
select substring("2018-08-14 13:14:00",1,4) as year
,substring("2018-08-14 13:14:00",1,7) as month
,substring("2018-08-14 13:14:00",1,10) as day
--从字符串第2位开始截取,直到遇到']'结束.instr可以输出特定字符在字符串中位置
,substr('["key1":"value1","key2":"value2"]',2,instr('["key1":"value1","key2":"value2"]',']')-2) as result
输出结果如下所示:
(2)提取json字符串
select a.value2
,b.value1
,b.value3
from(select get_json_object('{"key1":"value1","key2":"value2","key3":"value3"}','$.key2') value2) a
--批量提取json字符串中的value
LATERAL VIEW json_tuple('{"key1":"value1","key2":"value2","key3":"value3"}','key1','key3')b as value1,value3
输出结果如下图所示:
(3)正则函数提取字符串
以上都是格式比较规整的字符串。如果遇到非标准化的原始字符串时,需要分析字符串的特点,使用正则函数提取出想要的数据。
select regexp_extract('key1=123,key=456','key1=(-?[0-9]+)',1) as key1 ------获取整数(正负)
,regexp_extract('key3=test2,key=测试','key3=([a-z0-9]+)',1) as key3 ----------获取字符串(包含英文和数字)
,regexp_extract('key=456,key2=测试','key2=([\\u4e00-\\u9fa5]+)',1) as key2 ----------获取中文
输出结果如下图所示:
2.排序函数