You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Presto中将多列数值合并为单个数组?

解决SQL合并数值列为数组格式的问题

问题场景

现有表格数据:

Array1Array2
0.999939381.88473736
4.6699393810.7473736

需要将每行的Array1和Array2合并为[值1, 值2]格式的数组列Array3,预期结果:

Array3
[0.99993938, 1.88473736]
[4.66993938, 10.7473736]

使用select concat(Array1, Array2) from table执行后,结果既缺少逗号分隔,还丢失了小数部分。

问题原因

直接使用concat拼接数值类型列时,数据库会自动做隐式类型转换:

  1. 数值转字符串的默认规则可能会截断小数位(比如只保留整数或少数几位小数);
  2. 拼接过程没有添加自定义分隔符,导致两个值直接连在一起。

解决方案

根据不同SQL方言,提供以下可行写法:

1. MySQL/MariaDB

显式将数值转为保留完整小数位的字符串,再拼接格式符号:

-- 方法1:用CAST保留完整小数位
SELECT CONCAT('[', CAST(Array1 AS CHAR), ', ', CAST(Array2 AS CHAR), ']') AS Array3
FROM your_table;

-- 方法2:用FORMAT指定小数位数(注意:FORMAT会自动添加千分位,若不需要则用方法1)
SELECT CONCAT('[', FORMAT(Array1, 8), ', ', FORMAT(Array2, 8), ']') AS Array3
FROM your_table;

2. PostgreSQL

可以直接生成数组类型,或转成目标字符串格式:

-- 生成原生数组类型
SELECT ARRAY[Array1, Array2] AS Array3
FROM your_table;

-- 转成指定字符串格式
SELECT '[' || Array1::TEXT || ', ' || Array2::TEXT || ']' AS Array3
FROM your_table;

3. SQL Server

用STR函数指定数值的总长度和小数位数,再拼接:

SELECT CONCAT('[', STR(Array1, 10, 8), ', ', STR(Array2, 10, 8), ']') AS Array3
FROM your_table;

STR参数说明:STR(数值, 总长度, 小数位数),示例中总长度10足够容纳目标数值。

内容的提问来源于stack exchange,提问作者sonia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:00:11