繁体   English   中英

在Redshift表中使用REGEXP_REPLACE对字符串重新排序

[英]Reorder a string using REGEXP_REPLACE in a Redshift table

我正在尝试使用正则表达式替换Redshift表中的模式。 我一直在尝试REGEXP_RELACE但到目前为止没有成功。

我的数据具有列名称sequence和varchar数据类型,如下所示:

1420311 > 1380566 > 1380566 > 9991380564  
1489773 > 9991489773  
1367309 > 1367309 > 9991367309

我想在SQL Redshift中使用REGEXP_RELACE (或任何其他函数)来获得以下结果:

1420311 > 1380566 > 1380566 > 1380564 > 999
1489773 > 1489773 > 999
1367309 > 1367309 > 1367309 > 999

这样就可以找到出现在字符串开头的999序列,并在最后一个>之前放置并保留其余的字符串。

非常感谢您的帮助!

如果您只想查询可以生成此输出的查询,则应执行以下操作:

SELECT
    REGEXP_REPLACE(sequence, '999([0-9]{7})$', '$1 > 999')
FROM yourTable

这是一个解决方案(基于Tims),另外

  • 更新数据库内容,
    UPDATE yourTable SET sequence = ...而不是od SELECT ... FROM yourTable
  • 在任何成员的开头找到“ 999”,并在换行符之前容忍空格,
    没有$
  • 将其移到序列的最后,
    在第二个捕获组中使用( > [0-9]{7}){0,}
  • 查找任何打破7位数字规则的前导数字,不仅是“ 999”,
    使用([0-9]{1,})而不是“ 999”并捕获它

码:

UPDATE yourTable SET sequence =
    REGEXP_REPLACE(sequence, '([0-9]{1,})([0-9]{7}( > [0-9]{7}){0,})', '$2 > $1')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM