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

PostgreSQL如何从单列批量修剪多种后缀字符?

解决PostgreSQL中修剪车站名称后缀的问题

你之前用RTRIM没达到预期,是因为RTRIM的作用是移除字符串末尾任意包含在第二个参数里的字符,而不是匹配整个后缀。比如RTRIM(station_name,' (Temp)')会把末尾的空格、(、T、e、m、p、)逐个去掉,不是精准移除整个(Temp)后缀,所以结合CASE WHEN也容易出问题。

下面提供两种靠谱的实现方法:

方法1:使用正则表达式替换(推荐)

用REGEXP_REPLACE可以精准匹配并移除指定的整个后缀,一次处理多种情况:

SELECT
  station_name,
  REGEXP_REPLACE(station_name, '\s*(\(Temp\)|-\s*SW)$', '') AS cleaned_station_name
FROM station_data;

正则说明:

  • \s*:匹配零个或多个空格(处理后缀前可能带空格的情况)
  • (\(Temp\)|-\s*SW):匹配两种后缀模式,|表示“或”
    • \(Temp\):转义括号,精准匹配(Temp)
    • -\s*SW:匹配-后带零个或多个空格,再跟上SW
  • $:匹配字符串结尾,确保只替换末尾的后缀

方法2:使用CASE WHEN精准匹配

如果不想用正则,也可以用CASE WHEN结合LIKE和字符串截取:

SELECT
  station_name,
  CASE
    WHEN station_name LIKE '% (Temp)' THEN LEFT(station_name, LENGTH(station_name) - 7) -- 7是' (Temp)'的长度
    WHEN station_name LIKE '% - SW' THEN LEFT(station_name, LENGTH(station_name) - 5) -- 5是' - SW'的长度
    ELSE station_name
  END AS cleaned_station_name
FROM station_data;

测试结果

用你的示例数据测试两种方法,都会得到期望的结果:

station_namecleaned_station_name
north_stationnorth_station
east_stationeast_station
south_stationsouth_station
south_station (Temp)south_station
south_station - SWsouth_station

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:13