gpt4 book ai didi

sql - 在 Redshift SQL 中从数组中提取值

转载 作者:行者123 更新时间:2023-12-04 14:30:33 25 4
gpt4 key购买 nike

我有一些数组以下列格式存储在 Redshift 表“事务”中:

id, total, breakdown
1, 100, [50,50]
2, 200, [150,50]
3, 125, [15, 110]
...
n, 10000, [100,900]

由于这种格式对我没用,我需要对此进行一些处理以获取值。我试过使用正则表达式来提取它。

SELECT regexp_substr(breakdown, '\[([0-9]+),([0-9]+)\]')
FROM transactions

但是我得到一个错误返回说

Unmatched ( or \(
Detail:
-----------------------------------------------
error: Unmatched ( or \(
code: 8002
context: T_regexp_init
query: 8946413
location: funcs_expr.cpp:130
process: query3_40 [pid=17533]
--------------------------------------------

理想情况下,我希望将 x 和 y 作为它们自己的列,以便我可以进行适当的数学运算。我知道我可以在 python 或 PHP 等中相当容易地做到这一点,但我对纯 SQL 解决方案感兴趣 - 部分原因是我使用在线 SQL 编辑器(模式分析)将其轻松绘制为仪表板。

感谢您的帮助!

最佳答案

如果 breakdown 确实是一个数组,您可以这样做:

select id, total, breakdown[1] as x, breakdown[2] as y
from transactions;

如果分解不是数组而是例如varchar 列,如果将方括号替换为大括号,则可以将其转换为数组:

select id, total, 
(translate(breakdown, '[]', '{}')::integer[])[1] as x,
(translate(breakdown, '[]', '{}')::integer[])[2] as y
from transactions;

关于sql - 在 Redshift SQL 中从数组中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35242877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com