红移sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示
模式:红移sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示,sql,regex,amazon-redshift,Sql,Regex,Amazon Redshift,模式:d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55 如果要获取=&之间的第一个数字 output: 123 output: 134 如果我想获得=&之间的第二个匹配项 output: 123 output: 134 使用的正则表达式: select regexp_substr(' d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;','d[0-9]+=' ,1,2) as b; 但产出是
d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55代码>
如果要获取=
&
之间的第一个数字代码>
output:
123
output:
134
如果我想获得=
&
之间的第二个匹配项代码>
output:
123
output:
134
使用的正则表达式:
select
regexp_substr(' d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;','d[0-9]+=' ,1,2) as b;
但产出是这样的:
d1=
这个方向上的任何指针都会有帮助。另一种方法是使用regex\u substr
regex_substr(s,'[^d=;]*[0-9]+[^;=d]',1,2)
根据需要递增/递减整数值2。它看起来不像Amazon Redshiftregex\u substr
支持捕获组提取。尝试regexp\u replace(s,'..*;d1=([^;]+).'\1')
提取d1
值。选择regexp\u substr('d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;','(d[0-9]+=[0-9]+;)',1,7)作为b;这使得输出为::d6=55;我仍在努力避免d6&;从上面的输出中,您是否可以将all=替换为;,然后使用split_部分(字符串“;”,2),然后使用4作为下一个值?这与一位数不匹配,例如d0=3代码>@WiktorStribiżew这是已知的限制,但由于红移正则表达式不支持非捕获块。没有选择了