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