【问题标题】:How to split a column into multiple columns using SQL如何使用 SQL 将一列拆分为多列
【发布时间】:2021-12-28 17:32:57
【问题描述】:

我有一个列,其中包含列名和该列的值,格式如下:

column_name
name1: value1 name2: valu2 name3: value3 name4: value4 name5: value5

我希望列采用以下格式,而不是上面的设置:

name1 name2 name3 name4 name5
value1 value2 value3 value4 value5

问题是这些值在整个列中并不一致,有时我会有这些值的组合,有时没有,有时只有一个,但不管顺序如何,所有这些列都会必须创建。如何以我不必像这样指定值的通用方式调用它们:

CASE WHEN CHARINDEX(' ',column_name)>0 
         then SUBSTRING(column_name,1,CHARINDEX(' ',column_name)-1) 
         else column_name end name1, 
    CASE WHEN CHARINDEX(' ',column_name) > 0 
         THEN SUBSTRING(column_name,CHARINDEX(' ',column_name)+1,len(column_name))  
         ELSE NULL END as name2

【问题讨论】:

  • SQL Server PostgreSQL。请edit你的问题重新标记你真正使用的RDBMS。

标签: sql amazon-web-services amazon-redshift


【解决方案1】:

在这种情况下,我必须创建一个列类型 JSON,如下所示See the picture

然后您可以将此键值存储为 JSON 数组,并在您想再次使用此数据时对其进行解码。

缺点是你不能直接从数据库中搜索这个数组。

更新:如何在 redshift 上使用 JSON https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html

【讨论】:

  • 我在 Redshift 上执行此操作,我不确定该解决方案是否有帮助,但谢谢。
  • @WendyVelasquez,有消息称他们在 redshift 上支持原生 JSON here
  • 感谢您提供的信息,一旦我弄清楚它会有所帮助。 @Abdelraouf Ferah。这里的问题是,该表已经在 Redshift 上被摄取,所以它只是我需要修改的一列,不知道如何添加那部分。
  • 欢迎您,您需要将列更改为输入 SUPER 并更改已提取的查询有一个使用列类型 SUPER 的好例子docs.aws.amazon.com/redshift/latest/dg/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2014-05-02
  • 1970-01-01
相关资源
最近更新 更多