我是一名数字营销经理,正在尝试将我的广告系列细分为切片分析。我的广告系列列在一列中,如下所示。
FR-SRC-PLATFORM | MISC {bw}
FR-SRC-M2M sim | Sim {bw}
ES-SRC-IOT | Connectivity {e}
我想先将每个分开 - 然后|然后在{。
是否可以通过PostgreSQL基于不同的符号来做到这一点?
谢谢
答案 0 :(得分:0)
您需要查看字符串函数,这在任何查询语言中都很常见。
https://www.postgresql.org/docs/current/static/functions-string.html
substring()
与position()
相结合将帮助您实现所需。
祝你好运!
答案 1 :(得分: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}
答案 2 :(得分: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函数只是一个函数,它将字符串除以第二个参数的部分 - 所以在这种情况下,它将your_col分成单独的字符串,除以'{'(在上面的一个例子中),然后它返回一部分(部件号是第三个参数)。
因此,通过多次使用它,并使用它来进一步划分字符串,我们应该有预期的结果。