SQL Server-替换-与旧子字符串匹配的字符串会编辑整个字段吗?

时间:2019-03-07 02:10:22

标签: sql-server

我最近收到一个请求,要求从客户数据库的来宾姓氏字段中删除一些座席名称。

例如。 'John Smith -Wotif'

在使用以下UPDATE语句进行测试时,会擦除整个字段,而不仅仅是特定的字符串。

UPDATE GUEST
SET SURNAME = REPLACE(' -Wotif',' -Wotif','')
WHERE SURNAME LIKE '% -Wotif'

此后,我发现仅将列名用作匹配字符串将允许完整语句工作(即使已在SET部分中指定),但我无法弄清楚原始语句的逻辑位置有效地说“彻底清除了这些字段”。

除非另有说明,否则''替换项仅适用于子字符串中包含的值,而不管字符串和子字符串是否匹配?

2 个答案:

答案 0 :(得分:1)

REPLACE函数中的第一个参数是您要搜索的完整字符串。因此,您应该引用SURNAME字段,而不是指定字符串的一部分。

REPLACE(SURNAME,' -Wotif','')

答案 1 :(得分:0)

您更新的SQL命令应如下所示-

UPDATE GUEST 
SET SURNAME = REPLACE(SURNAME, 'FindValue' , 'ReplaceWithValue') 
WHERE SURNAME LIKE '% -Wotif'

如果要查找并替换'-Wotif'为空白,则更新命令应如下所示-

UPDATE GUEST 
SET SURNAME = REPLACE(SURNAME, '-Wotif' , '') 
WHERE SURNAME LIKE '% -Wotif'