如何把SQL/PostgreSQL/MySQL中的“65→67→69”改成"J7,G2,P9"?或者使用Pentaho Data Integration(Spoon)中的split fields/value mapper来实现?
How to change "65→67→69" to "J7,G2,P9" in SQL/PostgreSQL/MySQL? Or use split fields/value mapper in Pentaho Data Integration (Spoon) to realize it?
如何把SQL/PostgreSQL/MySQL中的“65→67→69”改成“J7,G2,P9”?或者使用Pentaho Data Integration(Spoon)中的split fields/value mapper来实现?
我使用 KETTLE(Pentaho Data Integration/Spoon) 从其他数据库向 PostgreSQL 插入数据,我有一个包含以下数据的字段
value
-----------
65→67→69
15→19→17
25→23→45
19→28→98
ID value
--------
65 J7
67 G2
69 P9
15 A8
19 b9
17 C1
25 b12
23 e12
45 A23
28 C17
98 F18
以及如何将上面的值更改为下面的值?有什么SQL方式或者KETTLE方式实现吗?
new_value
-----------
J7,G2,P9
A8,b9,C1
b12,e12,A23
b9,C17,B18
非常感谢您的任何建议。
假设这些表:
create table table1 (value text);
insert into table1 (value)
values
('65→67→69'),
('15→19→17'),
('25→23→45'),
('19→28→98')
;
create table table2 (id int, value text);
insert into table2 (id, value)
values
(65, 'J7'),
(67, 'G2'),
(69, 'P9'),
(15, 'A8'),
(19, 'b9'),
(17, 'C1'),
(25, 'b12'),
(23, 'e12'),
(45, 'A23'),
(28, 'C17'),
(98, 'F18')
;
在 Postgres 中,您可以使用标量子选择:
select t1.value,
(select string_agg(t2.value, ',' order by t.idx)
from table_2 t2
join lateral unnest(string_to_array(t1.value,'→')) with ordinality as t(val,idx) on t2.id::text = t.val
) as new_value
from table_1 t1;
如何把SQL/PostgreSQL/MySQL中的“65→67→69”改成“J7,G2,P9”?或者使用Pentaho Data Integration(Spoon)中的split fields/value mapper来实现?
我使用 KETTLE(Pentaho Data Integration/Spoon) 从其他数据库向 PostgreSQL 插入数据,我有一个包含以下数据的字段
value
-----------
65→67→69
15→19→17
25→23→45
19→28→98
ID value
--------
65 J7
67 G2
69 P9
15 A8
19 b9
17 C1
25 b12
23 e12
45 A23
28 C17
98 F18
以及如何将上面的值更改为下面的值?有什么SQL方式或者KETTLE方式实现吗?
new_value
-----------
J7,G2,P9
A8,b9,C1
b12,e12,A23
b9,C17,B18
非常感谢您的任何建议。
假设这些表:
create table table1 (value text);
insert into table1 (value)
values
('65→67→69'),
('15→19→17'),
('25→23→45'),
('19→28→98')
;
create table table2 (id int, value text);
insert into table2 (id, value)
values
(65, 'J7'),
(67, 'G2'),
(69, 'P9'),
(15, 'A8'),
(19, 'b9'),
(17, 'C1'),
(25, 'b12'),
(23, 'e12'),
(45, 'A23'),
(28, 'C17'),
(98, 'F18')
;
在 Postgres 中,您可以使用标量子选择:
select t1.value,
(select string_agg(t2.value, ',' order by t.idx)
from table_2 t2
join lateral unnest(string_to_array(t1.value,'→')) with ordinality as t(val,idx) on t2.id::text = t.val
) as new_value
from table_1 t1;