如何将Oracle截取竖线前内容的REGEXP_SUBSTR语句转换为PostgreSQL语法
Oracle字符串截取逻辑转PostgreSQL实现
需求说明
需要删除字符串中竖线|分隔符之后的内容,Oracle环境下原有实现语句为:
select REGEXP_SUBSTR(KEYVALUES,'[^|]+',1,1) from tab1;
输入示例
000000001 000000001|16 000000002 000000002|16 000000003 000000003|16 000000004 000000004|16 000000005 000000006
期望输出
000000001 000000001 000000002 000000002 000000003 000000003 000000004 000000004 000000005 000000006
可用PostgreSQL实现方案
方案1:直接复用正则逻辑(兼容Oracle写法)
PostgreSQL 10及以上版本原生支持REGEXP_SUBSTR函数,原有Oracle语句可以直接执行:
SELECT REGEXP_SUBSTR(KEYVALUES, '[^|]+', 1, 1) FROM tab1;
方案2:使用原生字符串分割函数(性能更优)
推荐使用PostgreSQL内置的SPLIT_PART函数实现,无需正则匹配,执行效率更高,无版本兼容问题:
SELECT SPLIT_PART(KEYVALUES, '|', 1) FROM tab1;
函数说明:
- 第一个参数:待处理的字符串字段
- 第二个参数:分隔符,这里为竖线
| - 第三个参数:返回分割后的第N个部分,这里取第一个部分
如果字符串中没有对应分隔符,会直接返回原字符串,完全符合需求场景的输出要求。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

