Postgres 9.4用regexp_matches替代Teradata regexp_substr实现子串拼接
解决方案:Postgres 9.4替代Teradata REGEXP_SUBSTR实现字符串提取拼接
针对Postgres 9.4(Greenplum基于该版本)不支持后向断言、无法直接使用REGEXP_SUBSTR的问题,可利用Postgres内置的substring函数结合捕获组实现需求,无需处理数组,写法更简洁:
最终实现SQL
COALESCE(TRIM(substring('Office №9013/0713' from '№([0-9]+)')), '-1')::INT || '_' || COALESCE(TRIM(substring('Office №9013/0713' from '/([0-9]+)')), '-1')::INT
逻辑说明
- 提取目标内容:
substring('Office №9013/0713' from '№([0-9]+)'):通过正则№([0-9]+)匹配№后的数字,捕获组([0-9]+)会直接返回匹配到的数字串(此处为9013)substring('Office №9013/0713' from '/([0-9]+)'):同理,匹配/后的数字串(此处为0713)
- 兼容空值场景:用
COALESCE将未匹配到的空值替换为'-1',再通过::INT转换为整数(与原Teradata逻辑一致) - 拼接结果:用
||运算符将两部分结果与_拼接,最终得到9013_713
边界情况验证
- 若字符串无
№:返回-1_713 - 若字符串无
/:返回9013_-1 - 若两者都无:返回
-1_-1
内容的提问来源于stack exchange,提问作者statlad
相关产品推荐
相关产品推荐

