如何在 SQL 查询中保留一些数字并删除其他数字

How to keep some numbers and delete other numbers in a SQL query

假设我的数据是这样的:

abcd abcd aaa 1234 1234566789 abcd abcd aaa 123456789 1234sfjsalfj

我想做的是:

  1. 如果一个数字是3到6位数字,前面有aaa,那我留着。
  2. 如果前面没有aaa,或者数字超出我的范围,我不需要其他数字(3-6)

所以,这个例子应该转移到:

abcd abcd aaa 1234 abcd abcd sfjsalfj

如何在 Athena SQL 中执行此操作?也许不是一个单一的查询。使用 with 或任何其他查询组合也可以。

您应该能够使用此正则表达式在一个查询中进行替换:

(?<!aaa |\d)\d+\s*|(aaa (\d{1,2}(?!\d)|\d{7,})\s*)

这会查找前面没有 aaa 的任何数字,或者前面有 aaa 的 1、2 或 >6 个数字。任何匹配项都应替换为空字符串(使用 regexp_replace 的两个参数版本,即

SELECT regexp_replace('abcd abcd aaa 1234 1234566789 abcd abcd aaa 123456789 1234sfjsalfj', '(?<!aaa |\d)\d+\s*|(aaa (\d{1,2}(?!\d)|\d{7,})\s*)')

regex101

上的正则表达式演示