Netezza数据库如何查询列中含SN及两侧各1字符的去重子串
Netezza 数据库下的实现方案
你可以直接用 Netezza 内置的正则提取函数实现需求,核心是用 .?SN.? 正则模式匹配「SN本身/左边1个字符+SN/SN+右边1个字符/左边1个字符+SN+右边1个字符」的所有情况,刚好符合你要提取SN及左右各1个字符的要求。
单字段仅第一个SN匹配场景
如果每个SYMBOL字段中仅存在一个SN子串,用以下语句即可:
SELECT DISTINCT REGEXP_EXTRACT(SYMBOL, '.?SN.?') AS target_sub FROM your_table WHERE SYMBOL LIKE '%SN%'
单字段存在多个SN匹配场景
如果需要提取单个SYMBOL字段中所有出现的SN对应子串,可配合REGEXP_EXTRACT_ALL拆分后去重:
SELECT DISTINCT t.sn_sub FROM your_table, TABLE(REGEXP_EXTRACT_ALL(your_table.SYMBOL, '.?SN.?') OVER (PARTITION BY your_table.Field1)) AS t(sn_sub) WHERE your_table.SYMBOL LIKE '%SN%'
逻辑说明
- 正则模式
.?表示匹配0个或1个任意字符,.?SN.?刚好覆盖SN在字符串开头(左边无字符)、结尾(右边无字符)、中间的所有边界情况 - 输出的子串会严格保留匹配到的空格、下划线等特殊字符,完全匹配你给出的示例输出要求
内容的提问来源于stack exchange,提问作者Amy Rose
相关产品推荐
相关产品推荐

