我是一名數字營銷經理,正在嘗試將我的廣告系列細分爲分片分析。我的廣告系列按以下方式列在一列中。根據不同的符號創建多個列
FR-SRC-PLATFORM | MISC {bw}
FR-SRC-M2M sim | Sim {bw}
ES-SRC-IOT | Connectivity {e}
我想分開每一個基於 - 然後|然後在{。
是否有可能根據不同的符號通過PostgreSQL的做到這一點?
謝謝
我是一名數字營銷經理,正在嘗試將我的廣告系列細分爲分片分析。我的廣告系列按以下方式列在一列中。根據不同的符號創建多個列
FR-SRC-PLATFORM | MISC {bw}
FR-SRC-M2M sim | Sim {bw}
ES-SRC-IOT | Connectivity {e}
我想分開每一個基於 - 然後|然後在{。
是否有可能根據不同的符號通過PostgreSQL的做到這一點?
謝謝
您需要查看字符串函數,這在任何查詢語言中都很常見。
https://www.postgresql.org/docs/current/static/functions-string.html
substring()
與position()
相結合,將幫助你實現你所需要的。 祝你好運!
這可以通過使用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}
完美的工作,非常感謝。由於我沒有完全理解所做的事情,是否有可能提供更多的邏輯。 –
嘗試類似如下(有許多方法來分割你的字符串,但這裏有一個)
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劃分爲單獨的字符串,並在'{'(在上面的一個示例中)中劃分,然後返回一個部分(部件編號是第三個參數)。
所以通過多次使用它,並使用它來進一步劃分字符串,我們應該有預期的結果。
你好喬,謝謝你的迴應。你介意提供一點關於這個查詢如何工作的解釋嗎?數字有什麼作用?如果我想要這個公式也填充可能適用於標準較大的列。例如,如果該廣告系列的名稱如下所示: FR-SRC-PLATFORM | MISC | SIM | USA {bw}。我基本上是在新表格中創建額外的列,以便SIM和USA填充。非常感謝先進的。 –
查看更新的答案以獲取解釋。 –
單個數組或json列就足夠了還是真的需要多列?如果是這樣,你是否需要3列? –
你好喬,我需要5列,如圖片中所述。他們不幸的必須是5,因爲我需要使用這些通過Excel數據透視表進行報告。 –