Tsql 在T-SQL中用前导空格替换短语-但它也替换没有前导空格的短语

Tsql 在T-SQL中用前导空格替换短语-但它也替换没有前导空格的短语,tsql,Tsql,我遇到了一个有趣的问题,我希望有人能解释一下 我正试图从MS SQL数据库中提取一个唯一的姓名列表,但该公司对他们的姓名一直很马虎。他们在一些用户的姓氏后面加了一个代码。我需要删除那个代码 例如: 姓 无名氏 玛丽·史密斯 迈克·杰克逊 布莱恩·阿斯特 杰基·马斯特森 在本例中,AST是它们附加的代码。也不是所有的姓都有。我需要得到一个没有代码的姓氏输出 我本以为这是REPLACE的一个简单用法。我试过: select REPLACE(lastname, ' AST', '') from tab

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

我正试图从MS SQL数据库中提取一个唯一的姓名列表,但该公司对他们的姓名一直很马虎。他们在一些用户的姓氏后面加了一个代码。我需要删除那个代码

例如: 姓

无名氏

玛丽·史密斯

迈克·杰克逊

布莱恩·阿斯特

杰基·马斯特森

在本例中,AST是它们附加的代码。也不是所有的姓都有。我需要得到一个没有代码的姓氏输出

我本以为这是REPLACE的一个简单用法。我试过:

select REPLACE(lastname, ' AST', '') from table
请注意搜索短语引号中的前导空格。。。这可以删除附加在姓氏后面的AST

然而,我的问题是,它也会删除任何AST出现在字段开头的地方。因此,布莱恩·阿斯特以布莱恩·奥尔的身份出场,因为这场比赛是从AST开始的。然而它不能正确地将ast从中间移除,因此Jackie Masterson很好

你知道为什么我在搜索词中忽略了字段开头的前导空格吗?我已经尝试过ltrim来消除这个领域有前导空间的可能性

谢谢

使用空字符串将删除源字符串中任何位置的搜索字符串。因此,这一行为符合预期

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

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

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

您还需要使用另一个Replace函数来除去名称中没有AST的$$$。从TableWhoa中选择ReplaceLastName+“$$$”、“AST$$$”、“$$$”。那是一种天才。我试试看。@Reagan您可能会添加一些内容,比如WHERE RIGHTlastname,4='AST',以仅获取受影响的行…哦。我要坦白。当我执行CaseNonsitive的建议时,我意识到我犯了一个错误。我实际上是在替换两个字段的组合短语replacefirstname+“”+lastname,'AST'。当然,这是在“Brian Astor”的完整短语中找到了“AST”。哈哈,我太傻了。。。那是一个深夜。当我更改它,使替换实际上只在lastname字段上时,“AST”本身没有$$$就工作得很好。谢谢大家的祝福。