You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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';

步骤说明:

  1. reverse(pid):反转原字符串,将末尾的-XXX.pdf转为fdp.XXX-;
  2. strpos(reverse(pid), '-'):找到反转后第一个连字符的位置(对应原字符串最后一个连字符);
  3. substring(...):截取反转字符串中该连字符之后的部分(即原字符串最后一个连字符前的内容反转结果);
  4. reverse(...):将截取内容反转回原顺序,拼接.pdf得到最终结果。

内容的提问来源于stack exchange,提问作者amnesic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:05:33