我有下面的update语句,它大部分时间都能工作,但是在下面的示例中,文本White并没有在第2行中删除。
如果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'从Green一词中省略field2,因为它在field1中存在,而从field2中省略White,因为它存在于field1中。
发布于 2017-12-11 00:54:54
问题是替换函数使用的是完全替换。下面的代码将“蓝色绿色”替换为"“。但是“蓝绿”字符串不会出现在第一个字符串中,因此没有任何东西被替换。
REPLACE('Green', 'Blue Green', '') 对于您的解决方案,您首先需要将field1拆分成单词。有关使用函数拆分字符串,请参见此solution。或者,您可以使用CLR调用.net函数来拆分字符串。
接下来,您可以使用游标遍历整个表,并对上述函数返回的每条记录,以及@Table中的每条记录运行一次替换函数。
请注意,这将比您最初编写的update语句慢得多,因为它没有使用SQL非常适合的SET逻辑,而是每次迭代表一条记录。
https://stackoverflow.com/questions/47741997
复制相似问题