redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示

Posted

技术标签:

【中文标题】redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示【英文标题】:redshift sql using regular expression to get first, second, third values from a string which is like following 【发布时间】:2018-06-29 08:55:16 【问题描述】:

模式:d0=123;d1=134;d2=123;d3=13;d4=33;d5=44;d6=55;

如果想得到=&;之间的第一个数字

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=

任何指向这个方向的指针都会有所帮助。

【问题讨论】:

Amazon Redshift regex_substr 似乎不支持捕获组提取。尝试regexp_replace(s, '.*;d1=([^;]+).*', '\1') 提取d1 值。 选择 regexp_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&;从上面的输出 你能不能把所有的 = 换成 ;,然后用 split_part(yourstring,';',2) 再用 4 作为下一个值? 【参考方案1】:

另一种方法是改用 regex_substr

regex_substr(s,'[^d=;]*[0-9]+[^;=d]',1,2) 

根据需要增加/减少整数值 2。

【讨论】:

这不会匹配一位数字,例如d0=3; @WiktorStribiżew 这是已知的限制,但由于红移正则表达式不支持非捕获块..别无选择

以上是关于redshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示的主要内容,如果未能解决你的问题,请参考以下文章

Redshift:如何从字符串列表中匹配最长的正则表达式字符串

如何从 Redshift 的正则表达式组中选择第一个结果?

正则表达式在 Redshift 中将 CamelCase 转换为蛇形案例

使用 SQL 的 Amazon Redshift 中的正则表达式

正则表达式字符串脱离 Redshift

Redshift / 正则表达式(Positive Lookbehind 和 Positive Lookahead)不起作用