PostgreSQL如何实现提取排除最后一个空格分隔单词的子串(Oracle代码适配)
PostgreSQL 等效实现方案
方案1:正则表达式实现(最简洁)
直接通过正则匹配替换掉末尾最后一个空格分隔的单词,代码如下:
trim(regexp_replace(country, '\s+[^ ]*$', ''))
验证效果:
- 输入字符串
'NEW YORK 5654',输出结果为NEW YORK - 输入字符串
'ST LOUIS PARK, MN 55426-9999',输出结果为ST LOUIS PARK, MN
方案2:基础字符串函数实现(无正则依赖)
如果不想使用正则,可以用PostgreSQL内置的字符串函数组合实现,逻辑和原Oracle代码完全对齐:
trim(substring(country from 1 for length(country) - strpos(reverse(country), ' ')))
逻辑说明:先将字符串倒序,找到倒序后第一个空格的位置,也就是原字符串最后一个空格的位置,截取到该位置之前的内容后去掉首尾空格即可。
边界场景兼容
如果需要处理输入字符串没有空格的场景,可以加一层判断避免返回空值:
CASE WHEN strpos(country, ' ') = 0 THEN country ELSE trim(regexp_replace(country, '\s+[^ ]*$', '')) END
内容的提问来源于stack exchange,提问作者Shalini
相关产品推荐
相关产品推荐

