【问题标题】:redshift sql using regular expression to get first, second, third values from a string which is like followingredshift sql使用正则表达式从字符串中获取第一、第二、第三个值,如下所示
【发布时间】: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 作为下一个值?

标签: sql regex amazon-redshift


【解决方案1】:

另一种方法是改用 regex_substr

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

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

【讨论】:

  • 这不会匹配一位数字,例如d0=3;
  • @WiktorStribiżew 这是已知的限制,但由于红移正则表达式不支持非捕获块..别无选择
猜你喜欢
  • 2021-02-23
  • 1970-01-01
  • 2019-10-29
  • 2011-03-29
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
相关资源
最近更新 更多