2017-06-26 14 views
1

私はデジタルマーケティングマネージャーであり、スライス分析のためにキャンペーンを細分化しようとしています。キャンペーンは次のように1つの列に表示されます。異なるシンボルに基づいて複数の列を作成する

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

私は、 {の上に。

Expected output

それは別のシンボルに基づいてのPostgreSQLを経由して、これを行うことは可能ですか?

あなたは

+0

単一の配列またはjson列で十分ですか、本当に複数の列が必要ですか?もしそうなら、正確に3列が必要ですか? –

+1

こんにちはジョー、私は写真に記載されているように5列が必要です。残念ながら、私はこれらをエクセルのピボットテーブルを介してレポートに使用する必要があるため、残念ながら5にする必要があります。 –

答えて

0

あなたが任意のクエリ言語でかなり共通している文字列関数、を見てする必要がありますありがとうございました。 position()と組み合わせる

https://www.postgresql.org/docs/current/static/functions-string.html

substring()あなたが必要なものを達成するのに役立ちます。 これで幸運です!

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} 
+0

それは完璧に働いた、ありがとう。私は何が行われたかを完全に理解していないので、さらなる論理を提供することは可能でしょうか。 –

0

には、次のようなものを試してみてください(そこに文字列を分割するために多くの方法がありますが、ここでは1だ)

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 2番目のパラメータ - この場合、your_colを '{'(上記の例では)で区切って別々の文字列に分割し、1つの部分(部品番号は3番目のパラメータ)を返します。

これを複数回使用し、それを使用して文字列をさらに分割すると、予想される結果が得られるはずです。

+0

こんにちは、Joe、ありがとうございました。このクエリの仕組みについて少し説明していただけますか?数字はどのような機能を果たしますか?この式を、基準が大きい場合にはおそらく適用できる列に移入させたい場合はどうでしょうか。たとえば、キャンペーンの名前が次のように指定されているとします。 FR-SRC-PLATFORM | MISC | SIM | USA {bw}基本的には、新しいテーブル内にSIMとUSAの可能性のために追加の列を作成しています。多くの先進的なありがとう。 –

+0

説明のための更新された答えを見なさい。 –

関連する問題