将列中的 SQL 数据转换为数组

Posted

技术标签:

【中文标题】将列中的 SQL 数据转换为数组【英文标题】:Convert SQL Data in columns into an array 【发布时间】:2021-03-03 21:03:07 【问题描述】:

假设你有一张简单的桌子

  Key c1 c2 c3
A id1  x  y  z
B id2  q  r  s

我想要的是一个将结果作为 2 个数组提供给我的查询 所以像

Select
id1,
ARRAY_MAGIC_CREATOR(c1, c2, c3)
from Table

结果是

id1, <x,y,z>
id2, <q,r,s>

我搜索的几乎所有内容最终都将行转换为数组或其他类似但非常不同的请求。

SQL 中是否存在类似的内容? 请注意,数据类型不是字符串,因此我们不能使用字符串 concat。它们都将被视为浮点数。

【问题讨论】:

【参考方案1】:

ARRAY:

Select id1, ARRAY[c1, c2, c3] as c_array
from Table

【讨论】:

【参考方案2】:

这也可以:o)

select key, [c1, c2, c3] c
from `project.dataset.table`  

【讨论】:

【参考方案3】:

考虑下面的通用选项,它不需要您输入所有列的名称,甚至不需要提前知道它们 - 更多 BigQuery'ish 做生意的方式:o)

select key, 
  regexp_extract_all(
    to_json_string((select as struct * except(key) from unnest([t]))),
    r'"[^":,]+":([^":,]+)(?:,|)'
  ) c
from `project.dataset.table` t    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

以上是关于将列中的 SQL 数据转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

将列中的所有文本转换为 MySql 中的驼峰式大小写

Python/Pandas/Datetime:将列中的整个列表转换为日期时间

将列从 varchar 转换为 nvarchar 是不是会更改存储在列中的字符串的编码?

SQL Server 2008 R2 - 将列转换为行并将所有值放在一列中

sql 将列数据转换为行

将列中的字符串集列表转换为新列