2017-10-12 8 views
0

私のテーブルに基づいて、複数の列に単一の列を分割::postrgresqlは、ABCは以下のように1つだけの列が含まれている名前と値

name=>countryvalue=>India name=>populationvalue=>10000000 name=>rankvalue=>25 name=>typevalue=>developing 
name=>countryvalue=>USA name=>populationvalue=>100000 name=>rankvalue=>3 name=>typevalue=>developed 
name=>countryvalue=>China name=>populationvalue=>15000000 name=>rankvalue=>5 name=>typevalue=>developed 

私の予想出力は以下のようなものです:

country  population rank type 
India  10000000  25  developing 
USA   100000  3  developed 
China  15000000  5  developed 
+0

列の値は値と列の両方から成ります?? – SachinSarawgi

+0

'split_part'?.. –

+0

@ SachinSarawgiはい。それには列名と値の両方が含まれています – DSawant

答えて

0

なめらか気に入りましたか?当然の

f=# with tbl(cl) as (select 'name=>countryvalue=>India name=>populationvalue=>10000000 name=>rankvalue=>25 name=>typevalue=>developing'::text) 
, part as (select split_part(cl,'name=>',2) a, split_part(cl,'name=>',3) b, split_part(cl,'name=>',4) c, split_part(cl,'name=>',5) d from tbl) 
select split_part(a,'=>',2),split_part(b,'=>',2),split_part(c,'=>',2),split_part(d,'=>',2) from part; 
split_part | split_part | split_part | split_part 
------------+------------+------------+------------ 
India  | 10000000 | 25   | developing 
(1 row) 

列の順序が付与されていない場合 - あなたは区切り

以上の変態が、きちんとした方法詳しく説明する必要があります:あなたはhstoreの拡張が必要になります。このため

f=# create table rt(country text, population text, rank int, type text); 
CREATE TABLE 
f=# with hs as (select hstore_to_json(substr(replace(replace('name=>countryvalue=>India name=>populationvalue=>10000000 name=>rankvalue=>25 name=>typevalue=>developing',' name=>',','),'value=>','=>'),7)::hstore) a) 
select j.* from hs, json_populate_record(null::rt, a) j; 
country | population | rank | type 
---------+------------+------+------------ 
India | 10000000 | 25 | developing 
(1 row) 

を、タイプ(またはテーブル)と熱意

関連する問題