我有以下更新声明,该声明大部分时间都有效,但在下面的示例中,第2行中未删除文字White
。
以下语法需要更改哪些内容,以便field2
中的文本始终被删除field1
中的文本,无论字符串中的文本位置如何?
Declare @Table1 Table (field1 varchar(100), field2 varchar(100))
Insert Into @Table1 (field1, field2) Values
('Blue Green', 'Green'), ('Red White', 'Socks Are White')
UPDATE @Table1
SET field2 = REPLACE(field1,field2,'')
WHERE field1 like '%'+field2+'%';
Select * from @Table1
修改
更新后的预期结果是
'Blue Green', ''
'Red White', 'Socks Are'
忽略field2中的单词Green
,因为它存在于field1中,并且从field2中省略单词White
,因为它存在于field1中
答案 0 :(得分:1)
问题是REPLACE功能正在使用完全替换。下面的代码将用“”替换“blue green”的出现。但是“蓝绿色”字符串不会出现在第一个字符串中,因此不会替换任何内容。
REPLACE('Green', 'Blue Green', '')
对于您的解决方案,首先需要将field1拆分为单词。有关使用函数拆分字符串的信息,请参阅此solution。或者,您可以使用CLR调用.net函数来拆分字符串。
接下来,您可以使用游标遍历整个表,并为@Table中的每条记录为上述函数返回的每条记录运行一次REPLACE函数。
请注意,这将比您最初编写的更新语句慢得多,因为它不使用SQL非常适合的SET逻辑,而是一次迭代第一个表记录。