首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用WildCards更新语句

用WildCards更新语句
EN

Stack Overflow用户
提问于 2017-12-10 18:20:45
回答 1查看 721关注 0票数 0

我有下面的update语句,它大部分时间都能工作,但是在下面的示例中,文本White并没有在第2行中删除。

如果field2中的文本存在于field1中,而不管字符串中的文本位置如何,那么需要在下面的语法中更改哪些内容才能始终删除它呢?

代码语言:javascript
复制
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

编辑

更新后的预期结果是

代码语言:javascript
复制
'Blue Green', ''
'Red White', 'Socks Are'

Green一词中省略field2,因为它在field1中存在,而从field2中省略White,因为它存在于field1中。

EN

回答 1

Stack Overflow用户

发布于 2017-12-11 00:54:54

问题是替换函数使用的是完全替换。下面的代码将“蓝色绿色”替换为"“。但是“蓝绿”字符串不会出现在第一个字符串中,因此没有任何东西被替换。

代码语言:javascript
复制
REPLACE('Green', 'Blue Green', '') 

对于您的解决方案,您首先需要将field1拆分成单词。有关使用函数拆分字符串,请参见此solution。或者,您可以使用CLR调用.net函数来拆分字符串。

接下来,您可以使用游标遍历整个表,并对上述函数返回的每条记录,以及@Table中的每条记录运行一次替换函数。

请注意,这将比您最初编写的update语句慢得多,因为它没有使用SQL非常适合的SET逻辑,而是每次迭代表一条记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47741997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档