PostgreSQL中如何移除字符串最后一个连字符及之后的内容?
PostgreSQL 移除最后一个连字符及其后内容的解决方案
针对你需求的字符串处理,这里提供两种高效的实现方法:
方法一:正则表达式法(简洁推荐)
使用regexp_replace函数匹配最后一个连字符及后续相关内容,直接替换得到目标结果:
-- 查询验证结果 SELECT regexp_replace(pid, '-(?!.*-).*\.pdf$', '.pdf') AS cleaned_pid FROM your_table_name; -- 直接更新表中数据 UPDATE your_table_name SET pid = regexp_replace(pid, '-(?!.*-).*\.pdf$', '.pdf');
模式说明:
-(?!.*-):精准匹配最后一个连字符,(?!.*-)是负前瞻断言,确保该连字符之后无其他连字符,避免误匹配前面日期中的连字符;.*\.pdf$:匹配该连字符后直到字符串结尾的内容(包含.pdf);- 替换为
.pdf,相当于保留最后一个连字符前的内容,直接拼接正确后缀。
方法二:字符串反转截取法(无正则依赖)
通过反转字符串定位最后一个连字符的位置,再截取拼接:
-- 查询验证结果 SELECT reverse(substring(reverse(pid) from strpos(reverse(pid), '-') + 1)) || '.pdf' AS cleaned_pid FROM your_table_name; -- 直接更新表中数据 UPDATE your_table_name SET pid = reverse(substring(reverse(pid) from strpos(reverse(pid), '-') + 1)) || '.pdf';
步骤说明:
reverse(pid):反转原字符串,将末尾的-XXX.pdf转为fdp.XXX-;strpos(reverse(pid), '-'):找到反转后第一个连字符的位置(对应原字符串最后一个连字符);substring(...):截取反转字符串中该连字符之后的部分(即原字符串最后一个连字符前的内容反转结果);reverse(...):将截取内容反转回原顺序,拼接.pdf得到最终结果。
内容的提问来源于stack exchange,提问作者amnesic
相关产品推荐
相关产品推荐

