【问题标题】:Replacing a phrase with a leading space in T-SQL - but it's also replacing the phrases without the leading space在 T-SQL 中用前导空格替换短语 - 但它也在替换没有前导空格的短语
【发布时间】:2020-07-02 22:39:26
【问题描述】:

我遇到了一个有趣的问题,希望有人能解释一下。

我正在尝试从 MS SQL 数据库中提取一个唯一的名称列表 - 但该公司一直对他们的名称草率。他们在一些用户的姓氏末尾附加了一个代码。我需要删除该代码。

示例: 名字姓氏

约翰·多伊

玛丽·史密斯 AST

迈克杰克逊 AST

布莱恩·阿斯特

杰基·马斯特森

在示例中,“AST”是他们附加的代码。它也没有适用于所有姓氏。我需要得到没有代码的只有姓氏的输出。

我原以为这是对 REPLACE 的简单使用。我试过了:

select REPLACE(lastname, ' AST', '') from table

注意搜索短语引号中的前导空格...这确实可以删除附加到姓氏的“AST”。

但是 - 我的问题是它也会删除 AST 出现在字段开头的任何地方。因此,自从该领域以 AST 开始以来,Brian Astor 就以“Brian or”的形式出现。但是...它没有正确地从中间删除 ast,所以 Jackie Masterson 很好。

任何想法为什么它忽略我的搜索短语中的前导空格作为字段的开头?我已经尝试 ltrim 来消除该字段具有前导空格的可能性。

谢谢!

【问题讨论】:

  • 哦哦。我有一个忏悔。当我执行不区分大小写的建议时,我意识到我犯了一个错误。我实际上是在替换两个字段的组合短语 replace(firstname + ' ' + lastname, 'AST', '')。因此,它当然是为“Brian Astor”的完整短语寻找“AST”。哈哈。我太笨了……那是一个深夜。当我更改它以便替换实际上只是在姓氏字段上时,没有 $$$ 的“AST”本身可以完美运行。感谢其他所有人。

标签: tsql


【解决方案1】:

Replace 使用空字符串将消除源字符串中任何位置的搜索字符串。所以行为符合预期。

如果您只需要替换搜索字符串末尾的“ast”,请尝试以下操作:

select replace(lastname + '$$$', ' AST$$$', '') from table

当然,您需要确保附加的$$$ 不会偶然出现在您的源字符串(姓氏)中。我猜这不太可能。

【讨论】:

  • 您还需要使用另一个替换函数来删除名称中没有“AST”的“$$$”。 SELECT REPLACE(REPLACE(lastname + '$$$', 'AST$$$', ''), '$$$', '') FROM Table
  • 哇。这真是个天才。我试试看。
  • @Reagan 您可以添加类似WHERE RIGHT(lastname, 4)=' AST' 的内容以仅获取受影响的行...
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 2016-12-05
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2018-10-04
相关资源
最近更新 更多