【问题标题】:Combining LTRIM and RTIM and REPLACE functions in MSSQL在 MSSQL 中结合 LTRIM 和 RTIM 以及 REPLACE 函数
【发布时间】:2017-04-05 17:59:01
【问题描述】:

我在表格中有一个字段,其中包含我想删除的前导字符和尾随字符。

本声明

选择全名作为类别 FROM dbo.inventory

在表格中生成此结果(显示部分结果):

  • 零件 - 皮带:Z.360J8
  • 零件 - 皮带:Z.360J14
  • 零件 - 皮带:Z.36355-123
  • 零件 - 塑料和框架:Z.103196-001
  • 零件 - 电缆/电线:Z.P037153674

我想删除破折号之前的“Parts -”以及冒号“:”后面的所有内容,这样我就可以只留下类别并获得这样的表格:

  • 腰带
  • 腰带
  • 腰带
  • 塑料和框架
  • 电缆/电线

我已经尝试过了,并成功删除了前面的“Parts -”,但成功地将语句与删除冒号“:”后的所有内容结合起来

SELECT LTRIM(RTRIM(REPLACE(FullName, 'Parts -', ''))) 作为类别 FROM dbo.inventory

产生这个结果:

  • 腰带:Z.360J8
  • 腰带:Z.360J14
  • 腰带:Z.36355-123
  • 塑料和框架:Z.103196-001
  • 电力电缆/电线:Z.P037153674

感谢您的帮助!

【问题讨论】:

    标签: sql-server replace trim


    【解决方案1】:

    使用 LEFT & CHARINDEX 的方法:

    SELECT REPLACE(LEFT(FullName, CHARINDEX(':', FullName) - 1), 'Parts - ', '')
    

    CHARINDEX 查找完整字符串中冒号字符的索引号,包含 -1 以将其删除。 LEFT 然后将字符串截断到该位置。 REPLACE 的功能与您在原始示例中的功能一样,删除了 'Parts - ' 部分(注意我在连字符后面加上了空格)。

    LTRIM 和 RTRIM 仅分别删除前导/尾随空格,因此它们在这里没有用。

    处理不包含冒号的行的代码(将返回一个空白字符串):

    SELECT REPLACE(REPLACE(LEFT(Fullname, CHARINDEX(':', Fullname)), 'Parts - ', ''), ':', '')
    

    【讨论】:

    • 感谢您的回复,语句产生了这个错误:Invalid length parameter passing to the LEFT or SUBSTRING function。当我删除“-1”时,语句执行没有错误,但包含冒号。 SELECT REPLACE(LEFT(FullName, CHARINDEX(':', FullName)), 'Parts - ', '') AS 类别 - 皮带:- 皮带:- 皮带:- 塑料和框架:- 电缆/电线:
    • 如果有任何行没有冒号,您将收到该错误(实际上,位置 = -1)。删除 -1 可以避免错误,但可能会为那些没有冒号的行返回一个空白字符串。如果您能找到这些行、发布示例以及您希望如何处理它们,我们可以相应地调整代码。与此同时,这可以作为一个非错误的解决方法:SELECT REPLACE(REPLACE(LEFT(Fullname, CHARINDEX(':', Fullname)), 'Parts - ', ''), ':', '')跨度>
    • 我结合了两个替换语句来实现结果,你给我带来了一个解决方案,谢谢。 REPLACE(REPLACE(LEFT (FullName, CHARINDEX(':', FullName)), 'Parts - ', ''), ':', '')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2011-07-05
    • 2020-10-15
    • 1970-01-01
    相关资源
    最近更新 更多