我是一名数字营销经理,正在尝试将我的广告系列细分为切片分析。我的广告系列列在一列中,如下所示。
FR-SRC-PLATFORM | MISC {bw}
FR-SRC-M2M sim | Sim {bw}
ES-SRC-IOT | Connectivity {e}
我想先将每个分开 - 然后|然后在{。
The result being
Cola | Colb | Colc | Col d | Col e
fr | SRC | Platform| Misc | {bw}
我发现以下公式有效,但只有一个问题......
SELECT split_part(your_col,'-',1) cola,
split_part(your_col,'-',2) colb,
split_part(split_part(your_col,'-',2),' | ',1) colc,
split_part(split_part(your_col,' | ',2),' {',1) cold,
split_part(split_part(your_col,'{',2),'}',1) cole
/* or
split_part(your_col,'{',2) cole
*/
FROM your_table
有时我的广告系列会有不同的结构(更多的关键字),导致更多的标准被|分隔符号。作为例子; ES-SRC-IOT |连通性| SIM |美国{e}。 我需要将所有内容保持在|之间和{在同一栏内。 有没有办法挽救这个公式,还是我应该从头开始搜索某些东西?
这是另一个例子 ES-SRC-IOT |连通性| SIM |美国{e}。
ColA|ColB|ColC|ColD |ColE
ES |SRC |IOT |Connectivity| SIM | USA|{e}
谢谢
答案 0 :(得分:0)
不确定这里是否有任何优雅的解决方案。我做什么 - 用大括号切成两个以排除最后一列,然后只重用你的代码。对于最后一个分隔符,我使用cc
列与'|'连接 - 它当然需要准确的语法。无论如何:
t=# with a(v) as (values('ES-SRC-IOT | Connectivity | SIM | USA {e}'),('FR-SRC-PLATFORM | MISC {bw}'))
, pre as (select split_part(v,'{',1) a,split_part(v,'{',2) b from a)
select split_part(a,'-',1) ca, split_part(a,'-',2) cb, split_part(split_part(a,'-',3),'|',1) cc, split_part(split_part(a,'-',3),split_part(split_part(a,'-',3),'|',1)||'|',2) cd, '{'||b ce from pre;
ca | cb | cc | cd | ce
----+-----+-----------+----------------------------+------
ES | SRC | IOT | Connectivity | SIM | USA | {e}
FR | SRC | PLATFORM | MISC | {bw}
(2 rows)
所以在你的情况下,查询将是:
with a(v) as (select your_col from your_table)
, pre as (select split_part(v,'{',1) a,split_part(v,'{',2) b from a)
select split_part(a,'-',1) ca, split_part(a,'-',2) cb, split_part(split_part(a,'-',3),'|',1) cc, split_part(split_part(a,'-',3),split_part(split_part(a,'-',3),'|',1)||'|',2) cd, '{'||b ce from pre;
答案 1 :(得分:0)
**Courtesy of Vao **
t=# with a(v) as (values('ES-SRC-IOT | Connectivity | SIM | USA {e}'),
('FR-SRC-PLATFORM | MISC {bw}'))
, pre as (select split_part(v,'{',1) a,split_part(v,'{',2) b from a)
select split_part(a,'-',1) ca, split_part(a,'-',2) cb, split_part
(split_part (a,'-',3),'|',1) cc, split_part(split_part(a,'-',3),
split_part (split_part(a,'-',3),'|',1)||'|',2) cd, '{'||b ce from pre;
ca | cb | cc | cd | ce
----+-----+-----------+----------------------------+------
ES | SRC | IOT | Connectivity | SIM | USA | {e}
FR | SRC | PLATFORM | MISC | {bw}
(2行)