You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

逻辑说明

  1. 提取目标内容:
    • substring('Office №9013/0713' from '№([0-9]+)'):通过正则№([0-9]+)匹配№后的数字,捕获组([0-9]+)会直接返回匹配到的数字串(此处为9013)
    • substring('Office №9013/0713' from '/([0-9]+)'):同理,匹配/后的数字串(此处为0713)
  2. 兼容空值场景:用COALESCE将未匹配到的空值替换为'-1',再通过::INT转换为整数(与原Teradata逻辑一致)
  3. 拼接结果:用||运算符将两部分结果与_拼接,最终得到9013_713

边界情况验证

  • 若字符串无№:返回-1_713
  • 若字符串无/:返回9013_-1
  • 若两者都无:返回-1_-1

内容的提问来源于stack exchange,提问作者statlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:50:45