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%'类型的字符。