PostgreSQL如何移除拆分字符串的最后两部分?
解决方案:移除点分隔字符串的最后两部分
针对你遇到的字符串处理需求,这里提供两种在PostgreSQL中可行的方法,无需关心原字符串拆分后的总段数:
方法1:反转字符串+拆分函数组合
通过反转字符串把最后两段移到开头,截取掉前两段后再反转回来:
SELECT REVERSE(SPLIT_PART(REVERSE(id), '.', 3)) AS processed_id FROM your_table;
原理说明:
REVERSE(id):将原字符串反转,比如AB.X.LEFT.01会变成10.TFEL.X.BASPLIT_PART(REVERSE(id), '.', 3):按.拆分反转后的字符串,从第3个部分开始取所有内容,得到X.BA- 再次执行
REVERSE就得到最终结果AB.X
方法2:正则表达式替换
用正则匹配并替换掉末尾的两个点分隔段:
SELECT REGEXP_REPLACE(id, '\.[^.]+\.[^.]+$', '') AS processed_id FROM your_table;
正则说明:
\.[^.]+\.[^.]+$:专门匹配字符串末尾的两个点分隔段:\.[^.]+:匹配一个.加上任意非.字符(即一段独立内容)- 重复两次即可锁定最后两段,
$限定只匹配字符串结尾部分
- 将匹配到的内容替换为空,就保留了除最后两段外的所有内容
两种方法都能完美处理你提供的所有测试用例,输出符合预期的结果。
内容的提问来源于stack exchange,提问作者JPh
相关产品推荐
相关产品推荐

