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

SQL Server中如何移除字符串末尾的连字符

解决SQL Server中移除字符串末尾连字符的问题

问题分析

你需要移除字符串末尾的连字符(包括普通短横-和长横–)及周边空格,但保留字符串中间的连字符。之前用rtrim(ltrim(replace(bal_sheet_item, '-', ' ')))会替换所有连字符,不符合需求。

解决方案

方法1:适用于SQL Server 2017及以上版本(推荐)

利用TRIM函数的多字符移除特性,直接指定要清除的字符集合(空格、短横、长横):

SELECT TRIM(' -–' FROM bal_sheet_item) AS cleaned_item
FROM your_table;

这个语句会自动去除字符串首尾的空格、-和–,中间的连字符会完整保留,完全匹配你的需求。

方法2:适用于SQL Server 2017以下版本

如果你的SQL Server版本不支持多字符TRIM,可以用PATINDEX结合字符串反转来定位需要保留的部分:

SELECT 
    CASE 
        -- 处理全是空格/连字符的特殊情况
        WHEN PATINDEX('%[^ -–]%', REVERSE(bal_sheet_item)) = 0 THEN ''
        ELSE LTRIM(LEFT(bal_sheet_item, LEN(bal_sheet_item) - PATINDEX('%[^ -–]%', REVERSE(bal_sheet_item)) + 1))
    END AS cleaned_item
FROM your_table;

原理:通过反转字符串,找到第一个不是空格、-、–的字符位置,计算出原字符串需要保留的长度,截取后再去除开头空格。

测试验证

针对你的测试数据:

  • 原数据:middle-to high-income parents → 处理后不变(末尾无连字符)
  • 原数据:Assets - → 处理后:Assets
  • 原数据:business – 1 year in their Certified program → 处理后不变(末尾无连字符)
  • 原数据:explain your assets → 处理后不变
  • 原数据:10-12-15 years - → 处理后:10-12-15 years

内容的提问来源于stack exchange,提问作者java-life-love

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:15:33