【问题标题】:Split a string column to new columns postgresql将字符串列拆分为新列 postgresql
【发布时间】:2021-11-18 11:32:43
【问题描述】:

我有一列可以包含 20 多个不同的值,它们用分号分隔。 例如:A;B;C;D;E;F;G;H;....,我需要拆分新列中的所有值。 我试图用SPLIT_PART() 拆分它,但似乎我需要从字符串中指定我想要的位置。但是在我的情况下,值太多了,这样做不是很有效。

我想知道我是否可以将它们拆分为 ;并且所有值都将保存在新列中?

【问题讨论】:

  • 我建议使用 Postgres 的 CSV 加载工具重新加载您的表格。然后数据将到达包含您期望的列的表中。
  • 如果您想要多列,则无法在输出中为您想要的每一列编写一个表达式。
  • 好的,感谢您的意见!我认为可能有一个简单的方法来做到这一点:(,不过谢谢!

标签: sql postgresql split metabase


【解决方案1】:

将字符串拆分为数组并选择数组元素。 CTE 代表桌子。
这是 10 列的插图。仍然有些冗长,但具有常规性质。

with the_table(s) as 
(
 values
 ('A01;B01;C01;D01;E01;F01;G01;H01;I01;J01'),
 ('A02;B02;C02;D02;E02;F02;G02;H02;I02;J02'),
 ('A03;B03;C03;D03;E03;F03;G03;H03;I03;J03')
),
arr(a) as 
(
 select string_to_array(s,';') from the_table
)
select 
  a[1] c1,a[2] c2,a[3] c3,a[4] c4,a[5]  c5,
  a[6] c6,a[7] c7,a[8] c8,a[9] c9,a[10] c10 -- ...
from arr;
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
A01 B01 C01 D01 E01 F01 G01 H01 I01 J01
A02 B02 C02 D02 E02 F02 G02 H02 I02 J02
A03 B03 C03 D03 E03 F03 G03 H03 I03 J03

【讨论】:

  • 所以我必须写 1 到 10 的索引来获取值?我认为therei会有一个更有效的方式。不过谢谢!
  • 可以,但您不必使用偏移量和长度。只是一个规则的数字序列。如果偏移量/长度因记录而异,它仍然可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多