2017-06-26 32 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

查看更新的答案以獲取解釋。 –

相關問題