我是一名数字营销经理,正在尝试将我的广告系列细分为分片分析。我的广告系列按以下方式列在一列中。根据不同的符号创建多个列
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数据透视表进行报告。 –