如何在PostgreSQL中查找字符串最后一个单词起始位置 兼容Oracle instr逻辑
PostgreSQL 对应 Oracle 功能实现方案
1. 等价 instr('abc de fgh',' ', -1) 的实现
Oracle 中instr(str, sub, -1)的作用是返回子串在原字符串中最后一次出现的位置,PostgreSQL 通用实现写法如下:
SELECT length('abc de fgh') - strpos(reverse('abc de fgh'), ' ') + 1;
执行返回结果为7,和 Oracle 执行结果完全一致。
2. 业务代码等价实现
你业务中使用的substr(country, instr(country,' ', -1)+1)逻辑是提取country字段最后一个空格之后的所有内容,PostgreSQL 有两种常用实现方式:
- 全版本兼容写法
-- 替换为你实际的表名即可使用 SELECT reverse(split_part(reverse(country), ' ', 1)) FROM 表名;
- 正则简化写法
-- 贪婪匹配到最后一个空格并删除,直接得到空格后内容 SELECT regexp_replace(country, '^.* ', '') FROM 表名;
内容的提问来源于stack exchange,提问作者Shalini
相关产品推荐
相关产品推荐

