" split_part"将列结构化为表格?

时间:2017-06-27 22:29:38

标签: sql postgresql

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

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

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

结果是

Cola | Colb | Colc    | Col d | Col e
fr   | SRC  | Platform| Misc  | {bw}

我发现以下公式有效,但只有一个问题......

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

有时我的广告系列会有不同的结构(更多的关键字),导致更多的标准被|分隔符号。作为例子; ES-SRC-IOT |连通性| SIM |美国{e}。理论上我想保留第一个|之间的所有内容并且首先{在同一列中。

有没有办法挽救这个公式,还是我应该从头开始搜索某些东西?

先谢谢你。

谢谢

2 个答案:

答案 0 :(得分:0)

如果您熟悉import { coins } from './coins'

plpgsql

结果:

╔═══════════════════════════════════════════╤══════╤══════╤══════════╤══════════════════════════╤══════╗
║                     x                     │ cola │ colb │   colc   │           cold           │ cole ║
╠═══════════════════════════════════════════╪══════╪══════╪══════════╪══════════════════════════╪══════╣
║ FR-SRC-PLATFORM | MISC {bw}               │ FR   │ SRC  │ PLATFORM │ MISC                     │ {bw} ║
║ FR-SRC-M2M sim  | Sim {bw}                │ FR   │ SRC  │ M2M sim  │ Sim                      │ {bw} ║
║ ES-SRC-IOT | Connectivity {e}             │ ES   │ SRC  │ IOT      │ Connectivity             │ {e}  ║
║ ES-SRC-IOT | Connectivity | SIM | USA {e} │ ES   │ SRC  │ IOT      │ Connectivity | SIM | USA │ {e}  ║
╚═══════════════════════════════════════════╧══════╧══════╧══════════╧══════════════════════════╧══════╝

如果您发现另一个数据案例,那么调整函数逻辑将非常简单。

答案 1 :(得分:0)

我会选择regex substring

with e AS ( VALUES  ('FR-SRC-PLATFORM | MISC {bw}')
      ,('FR-SRC-M2M sim  | Sim {bw}')
      ,('ES-SRC-IOT | Connectivity {e}')
      ,('AXE|SPADE|SHOVEL{test}')
)
SELECT column1,substring(column1 from $$^([^|]*)\|$$ ) as a
    ,substring(column1 from $$^[^|]*\|([^{]*)$$ ) as b
    ,substring(column1 from $x$[{](.*)[}]$$x$ ) as c
FROM e;

给出

            column1            |        a         |       b        |  c   
 ------------------------------+------------------+----------------+------
 FR-SRC-PLATFORM | MISC {bw}   | FR-SRC-PLATFORM  |  MISC          | bw
 FR-SRC-M2M sim  | Sim {bw}    | FR-SRC-M2M sim   |  Sim           | bw
 ES-SRC-IOT | Connectivity {e} | ES-SRC-IOT       |  Connectivity  | e
 AXE|SPADE|SHOVEL{test}        | AXE              | SPADE|SHOVEL   | test