2017-06-26 20 views
1

我是一名数字营销经理,正在尝试将我的广告系列细分为分片分析。我的广告系列按以下方式列在一列中。根据不同的符号创建多个列

FR-SRC-PLATFORM | MISC {bw} 
    FR-SRC-M2M sim | Sim {bw} 
    ES-SRC-IOT | Connectivity {e} 

我想分开每一个基于 - 然后|然后在{。

Expected output

是否有可能根据不同的符号通过PostgreSQL的做到这一点?

谢谢

+0

单个数组或json列就足够了还是真的需要多列?如果是这样,你是否需要3列? –

+1

你好乔,我需要5列,如图片中所述。他们不幸的必须是5,因为我需要使用这些通过Excel数据透视表进行报告。 –

回答

0

这可以通过使用string_to_array()做到:

-- test data 
with data (src) as (
values 
    ('FR-SRC-PLATFORM | MISC {bw}'), 
    ('FR-SRC-M2M sim | Sim {bw}'), 
    ('ES-SRC-IOT | Connectivity {e}') 
) 
-- actual query 
select (string_to_array(trim(split_part(src, '|', 1)), '-'))[1] as cola, 
     (string_to_array(trim(split_part(src, '|', 1)), '-'))[2] as colb, 
     (string_to_array(trim(split_part(src, '|', 1)), '-'))[3] as colc, 
     (string_to_array(trim(split_part(src, '|', 2)), ' '))[1] as cold, 
     (string_to_array(trim(split_part(src, '|', 2)), ' '))[2] as cole 
from data 

返回:

cola | colb | colc  | cold   | cole 
-----+------+----------+--------------+----- 
FR | SRC | PLATFORM | MISC   | {bw} 
FR | SRC | M2M sim | Sim   | {bw} 
ES | SRC | IOT  | Connectivity | {e} 
+0

完美的工作,非常感谢。由于我没有完全理解所做的事情,是否有可能提供更多的逻辑。 –

0

尝试类似如下(有许多方法来分割你的字符串,但这里有一个)

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 

split_part函数只是一个函数,它将一个字符串分为多个部分e第二个参数 - 因此在这种情况下,它将your_col划分为单独的字符串,并在'{'(在上面的一个示例中)中划分,然后返回一个部分(部件编号是第三个参数)。

所以通过多次使用它,并使用它来进一步划分字符串,我们应该有预期的结果。

+0

你好乔,谢谢你的回应。你介意提供一点关于这个查询如何工作的解释吗?数字有什么作用?如果我想要这个公式也填充可能适用于标准较大的列。例如,如果该广告系列的名称如下所示: FR-SRC-PLATFORM | MISC | SIM | USA {bw}。我基本上是在新表格中创建额外的列,以便SIM和USA填充。非常感谢先进的。 –

+0

查看更新的答案以获取解释。 –

相关问题