行转列的整体思路:列名和列值两列数据合并,根据需求提取数据转为列
concat() 拼接字符串
concat(str1,str2,str3,…)
select concat('a','b','c')?;
'abc'
连接参数的函数,返回结果为连接参数的字符串。如果有一个参数为NULL,则返回的结果为NULL。
select concat('a',null,'c');
null
多列合并成一列
select trade_id,concat(opt_type,'#',gmt_created) as opt_info from ods_all_o2o_order;
trade_id opt_info
13345 'seller_accepted#2022-01-01 20:57:33'
12378 'order_created#2022-01-23 10:23:01'
collect_set()把同一分组不同行的数据合并成一列
select trade_id,collect_set(opt_info) as info_set from test2 group by trade_id;
trade_id info_set
13345 ['seller_accepted#2022-01-01 20:57:33','order_created#2021-12-27 20:32:34']
12378 ['order_created#2022-01-23 10:23:01']
concat_ws(separator, str1, str2, …)
separator为参数指定分隔符,分隔符不能为null,如果设置为null,则返回结果为null
concat_ws() 函数 1、一次性指定分隔符,多列(多个字段)合并成一列(合并成一个字段)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2、将列表转换为由指定分隔符分隔的字符串
select concat_ws('*','aili','123','youyou');
'aili*123*youyou'
select concat_ws(',',['seller1','seller2','seller3','seller4','seller5']);
'seller1,seller2,seller3,seller4,seller5'
str_to_map 将字符串拆分成键值对
str_to_map(字符串参数, 分隔符1, 分隔符2)
使用两个分隔符将文本拆分为键值对。
分隔符1将文本分成K-V对,分隔符2分割每个K-V对。对于分隔符1默认分隔符是?',',对于分隔符2默认分隔符是?'='。
select str_to_map('seller_accepted#2022-01-01,order_created#2021-12-31',',','#');
{"seller_acceped":"2022-01-01","order_created":"2021-12-31"}
nvl()
|