Sql 如果另一列包含字符串,则更新列

Sql 如果另一列包含字符串,则更新列,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个包含三列的表 column1 column2 column3 mytestdata test myotherdata test 如果column1包含column2中的值,我想在column3中插入'somestring' 结果如下: column1 column2 column3 mytestdata test 'somestring' myotherdata test 你可以像下面这

我有一个包含三列的表

column1        column2     column3 
mytestdata     test 
myotherdata    test 
如果column1包含column2中的值,我想在column3中插入'somestring'

结果如下:

column1        column2     column3 
mytestdata     test        'somestring' 
myotherdata    test 

你可以像下面这样做

UPDATE tmp
SET
   column3 = (CASE WHEN tmp.column1 like '%' + tmp.column2 + '%' THEN 'something' ELSE tmp.column3')
FROM
    tablename tmp

根据RDBMS的不同,您有几个选项

对于MySQL和Oracle:

UPDATE yourTable
set column3 = 'somestring'
where INSTR(column2, column1) > 0
对于SQL Server:

UPDATE yourTable
set column3 = 'somestring'
where CHARINDEX(column1, column2) > 0
UPDATE myTable
   SET column3 = 'somestring'
 WHERE column1 LIKE '%' + column2 + '%'
UPDATE theTable SET column3 = 'somestring' 
WHERE CHARINDEX (column2, column1) > 0
SQL Server:

UPDATE yourTable
set column3 = 'somestring'
where CHARINDEX(column1, column2) > 0
UPDATE myTable
   SET column3 = 'somestring'
 WHERE column1 LIKE '%' + column2 + '%'
UPDATE theTable SET column3 = 'somestring' 
WHERE CHARINDEX (column2, column1) > 0
SQL Server:

UPDATE yourTable
set column3 = 'somestring'
where CHARINDEX(column1, column2) > 0
UPDATE myTable
   SET column3 = 'somestring'
 WHERE column1 LIKE '%' + column2 + '%'
UPDATE theTable SET column3 = 'somestring' 
WHERE CHARINDEX (column2, column1) > 0

如果column2='5%'会发生什么?它也会工作:其中column1类似于'%5%',与'%5%'相同。我对sql server很有信心,我相信其他rdbms也是这样工作的。由于某种原因,SSMS不喜欢将列名作为CONTAINS的第二个参数,因此更新了答案以克服
%
潜在的问题。我使用了通配符,效果很好。
无法在表或索引视图“yourTable”上使用CONTAINS或FREETEXT谓词,因为它不是全文索引的。
我非常确定,如果column2以“%”开头或结尾,下面使用字符串连接的示例将失败。编辑标记的家伙们,确保OPs RDBMS?@Adrian RDBMS是由OP在对已删除的答案的评论中指定的。@egrunin我更新了我的答案以克服潜在的
%
问题接受的答案不正确,请参见我的评论。这是不正确的。如果column1='3456'和column2='5%',它将匹配(而且不应该匹配)。这对于我的情况是正确的,因为我的字符串中没有任何'5%'类型的字符。