Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Amazon红移中提取两个括号之间的数字?_Sql_Amazon Web Services_Amazon Redshift - Fatal编程技术网

Sql 如何在Amazon红移中提取两个括号之间的数字?

Sql 如何在Amazon红移中提取两个括号之间的数字?,sql,amazon-web-services,amazon-redshift,Sql,Amazon Web Services,Amazon Redshift,我有一个列xyz,其值如下: a(1)\u f(5)\u d(10) a(12)f(4)d(3) 我需要提取并创建如下新列: a列f列d列 1 5 10 12 4 3 使用RegExp拆分字符串。这些值可以分组()。在下一步中可以调用所有三个组 正如注释中所述,Redshift对regexp组的支持并不是最好的,因此尝试使用position将字符串与substring拆分以查找分隔符: 使用RegExp拆分字符串

我有一个列
xyz
,其值如下:

a(1)\u f(5)\u d(10)
a(12)f(4)d(3)
我需要提取并创建如下新列:

a列f列d列
1           5          10
12          4          3

使用RegExp拆分字符串。这些值可以分组
()
。在下一步中可以调用所有三个组


正如注释中所述,Redshift对regexp组的支持并不是最好的,因此尝试使用position将字符串与substring拆分以查找分隔符:

使用RegExp拆分字符串。这些值可以分组
()
。在下一步中可以调用所有三个组


正如注释中所述,Redshift对regexp组的支持并不是最好的,因此尝试使用position将字符串与substring拆分以查找分隔符:

在红移中,您可以使用:

在红移中,您可以使用:


一行三列…因此对于上述情况,我将有2行3列。一行三列…因此对于上述情况,我将有2行3列。regexp_matches函数在amazon中不存在redshift@ShashikiranR陛下它是否与
$1
而不是
\1
一起工作?这也不起作用…我尝试用您的新suggestions@ShashikiranR好的,使用子串和位置的新方法。。。这真的不是很好,但最终应该可以使用。regexp_matches函数在amazon中不存在redshift@ShashikiranR嗯,它是用
$1
而不是
\1
工作的吗?这也不工作…我试着用你的新suggestions@ShashikiranR好的,使用子串和位置的新方法。。。这真的不是很好,但这最终应该会起作用。
SELECT
     vals[1]::int as a,
     vals[2]::int as f,
     vals[3]::int as d
FROM (
    SELECT
        regexp_matches(val, 'a\((\d+)\)_f\((\d+)\)_d\((\d+)\)') as vals
    FROM
        mytable
) s
SELECT
    substring(val, 3, position(')_f(' in val) - 3) as a,
    substring(val, position(')_f(' in val) + 4, position(')_d(' in val) - position(')_f(' in val) - 4),
    substring(val, position(')_d(' in val) + 4, length(val) - position(')_d(' in val) - 4)
FROM
    mytable
select split_part(split_part(col, ')', 1), '(', 2)::int as a,
       split_part(split_part(col, ')', 2), '(', 2)::int as f,
       split_part(split_part(col, ')', 3), '(', 2)::int as d