根据不同的符号从一个列创建多个列

时间:2017-06-26 16:44:08

标签: sql postgresql

我是一名数字营销经理,正在尝试将我的广告系列细分为切片分析。我的广告系列列在一列中,如下所示。

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

我想先将每个分开 - 然后|然后在{。

Expected output

是否可以通过PostgreSQL基于不同的符号来做到这一点?

谢谢

3 个答案:

答案 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分成单独的字符串,除以'{'(在上面的一个例子中),然后它返回一部分(部件号是第三个参数)。

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