AWS athena 正则表达式替换(第一次出现除外)

问题描述 投票:0回答:1

我在下面的列中有一些字符串值

hel_some_data
h_some_data_more_data
hello_some_more_data_data

我需要如下输出

    hel_some data
    h_some data more data
    hello_some more data data

基本上我想用“”替换“_”,除了第一次出现

我正在尝试使用正则表达式替换,但无法找到如何给出位置,我在文档中找到了一种语法,它看起来像是通过文档本身的代码提供位置不起作用,我正在尝试下面的文档示例。

SELECT REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 'i');

但它说找不到功能。

任何帮助,高度赞赏, 谢谢,

sql regex amazon-athena presto trino
1个回答
0
投票

您似乎正在查看 Redshift 的文档,它确实有这样的

REGEXP_REPLACE
功能,允许指定位置(这并不意味着您认为它的作用,如果我正确理解您的尝试)。

Athena 不是 Redshift,它基于 Presto/Trino,不支持此类版本的

REGEXP_REPLACE

一种选择是使用基于正则表达式将字符串拆分为字符串数组并应用连接函数的版本(docs):

-- sample data
WITH dataset(str) AS (
   values ('hel_some_data'),
        ('h_some_data_more_data'),
        ('hello_some_more_data_data')
)

-- query
select regexp_replace(str, '([^_]*_[^_]*)(.*)',  x -> x[1] || replace(x[2], '_', ' '))
from dataset;

输出:

           _col0
---------------------------
 hel_some data
 h_some data more data
 hello_some more data data
© www.soinside.com 2019 - 2024. All rights reserved.