如何在 SQL 查询中保留一些数字并删除其他数字
How to keep some numbers and delete other numbers in a SQL query
假设我的数据是这样的:
abcd abcd aaa 1234 1234566789 abcd abcd aaa 123456789 1234sfjsalfj
我想做的是:
- 如果一个数字是3到6位数字,前面有
aaa
,那我留着。
- 如果前面没有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*)')
上的正则表达式演示
假设我的数据是这样的:
abcd abcd aaa 1234 1234566789 abcd abcd aaa 123456789 1234sfjsalfj
我想做的是:
- 如果一个数字是3到6位数字,前面有
aaa
,那我留着。 - 如果前面没有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*)')
上的正则表达式演示