mysql regexp_split_to_table_使用regexp_split_to_table时出错(Amazon Redshift)

Erwin Brands..

10

A1

E是Posix样式转义字符串的前缀.现代Postgres通常不需要这个.如果要解释字符串中的特殊字符,请仅添加前缀.像E'\n' for a newline char.详细信息和文档链接:

E在您的查询中是无意义的噪音,但它应该仍然有效.我担心你回答的答案不是很好.

A2

应该按原样工作.但更好的没有E.

SELECT id, regexp_split_to_table(fruits, '|') AS split_fruits

FROM tbl;

对于简单的分隔符,您不需要昂贵的正则表达式.这通常更快:

SELECT id, unnest(string_to_array(fruits, '|')) AS split_fruits

FROM tbl;

在Postgres 9.3+中,您宁愿使用LATERAL连接来设置返回函数:

SELECT t.id, f.split_fruits

FROM tbl t

LEFT JOIN LATERAL unnest(string_to_array(fruits, '|')) AS f(split_fruits)

ON true;

细节:

亚马逊Redshift不是Postgres

它只实现了手册中记录的一组简化功能.特别是,没有表函数,包括基本函数unnest(),generate_series()或regexp_split_to_table()使用其"计算节点"(访问任何表)时.

您应该使用标准化的表格布局(每行一个水果的额外表格).

或者这里有一些在Redshift中创建一组行的选项:

此解决方法应该这样做:

创建一个数字表,至少与列中的水果一样多.临时性或永久性的,如果你继续使用它.假设我们从不超过9:

CREATE TEMP TABLE nr9(i int);

INSERT INTO nr9(i) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);

加入数字表和使用split_part(),实际上是在Redshift中实现的:

SELECT *, split_part(t.fruits, '|', n.i) As fruit

FROM nr9 n

JOIN tbl t ON split_part(t.fruits, '|', n.i) <> ''

瞧.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值