sql—如何将所有表的列连接为分隔格式,而不单独指定每一列

x0fgdtte  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(345)

例如。
给定一个只有基元类型的表,例如-

create table t (i int, dt date, str string, ts timestamp, bl boolean)
;

insert into t 
select 1,date '2017-03-14','Hello world',timestamp '2017-03-14 14:37:28.889',true
;

select * from t
;

+-----+------------+-------------+-------------------------+------+
| t.i |    t.dt    |    t.str    |          t.ts           | t.bl |
+-----+------------+-------------+-------------------------+------+
|   1 | 2017-03-14 | Hello world | 2017-03-14 14:37:28.889 | true |
+-----+------------+-------------+-------------------------+------+

... 以及 ||| 作为请求的分隔符
(为简单起见,我们可以假设它不会出现在数据中的任何地方)
请求的结果将是单个分隔字符串
1 | | | 2017-03-14 | | | |你好世界| | | 2017-03-14 14:37:28.889 | | |对

wsewodh2

wsewodh21#

此解决方案仅限于包含“基本”类型的表(没有结构、数组、Map等)。

select  printf(concat('%s',repeat('|||%s',field(unhex(1),*,unhex(1))-2)),*) 
from    t
;

1 | | | 2017-03-14 | | | |你好世界| | | 2017-03-14 14:37:28.889 | | |对
附笔 concat(*) 可以工作,但值不是用分隔符分隔的。 concat_ws(...,*) 产生一个异常。

相关问题