2017-06-26 3 views
1

Ich bin ein digitaler Marketing-Manager und versuche meine Kampagnen für geschnittene Analyse zu unterteilen. Meine Kampagnen sind in einer Spalte wie folgt aufgeführt.Erstellen Sie mehrere Spalten aus einem basierend auf verschiedenen Symbolen

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

Ich möchte jede zuerst basierend auf trennen - dann | und dann auf {.

Expected output

Ist es möglich, dies über PostgreSQL zu tun, basierend auf verschiedenen Symbolen?

Danke

+0

Wäre eine einzelne Array- oder JSON-Spalte ausreichend oder benötigen Sie wirklich mehrere Spalten? Wenn ja, benötigen Sie genau 3 Spalten? –

+1

Hallo Joe, ich brauche 5 Spalten wie auf dem Bild angegeben. Sie müssen leider 5 sein, da ich diese für die Berichterstattung über eine Excel-Pivot-Tabelle verwenden muss. –

Antwort

0

Diese string_to_array() mit getan werden kann:

-- 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 

Returns:

cola | colb | colc  | cold   | cole 
-----+------+----------+--------------+----- 
FR | SRC | PLATFORM | MISC   | {bw} 
FR | SRC | M2M sim | Sim   | {bw} 
ES | SRC | IOT  | Connectivity | {e} 
+0

Das hat perfekt funktioniert, vielen Dank. Wäre es möglich, weitere Logik bereitzustellen, da ich nicht vollständig verstehe, was getan wurde. –

0

Versuchen Sie so etwas wie die folgenden (es gibt viele Methoden sind Ihre String aufgeteilt werden, aber hier ist ein)

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 

Die Funktion split_part ist einfach eine Funktion, die eine Zeichenkette in Teile teilt Der zweite Parameter - in diesem Fall teilt er your_col in separate Strings, dividiert durch das '{' (in einem Beispiel oben) und gibt einen Teil zurück (die Teilenummer ist der dritte Parameter).

Also, indem Sie diese mehrmals verwenden und damit die Strings weiter aufteilen, sollten wir die erwarteten Ergebnisse haben.

+0

Hallo Joe, Danke für die Antwort. Würde es Ihnen etwas ausmachen, ein wenig Erklärung dafür zu geben, wie diese Abfrage funktioniert? Welche Funktionen spielen die Zahlen? Was, wenn ich möchte, dass diese Formel auch Spalten enthält, die vielleicht angewendet werden könnten, wenn die Kriterien größer wären. Ein Beispiel könnte sein, wenn die Kampagne wie folgt benannt wurde: FR-SRC-PLATTFORM | MISC | SIM | USA {bw}. Ich würde im Grunde zusätzliche Spalten in der neuen Tabelle für die Möglichkeit für SIM und USA erstellen. Vielen Dank im Voraus. –

+0

siehe aktualisierte Antwort für Erklärung. –

Verwandte Themen