用SQL替换替换未知值

时间:2011-06-07 15:16:59

标签: sql sql-server-2000

我可能在这里遗漏了一些非常明显的东西,但这对于在谷歌搜索来说是个熊(也许我没有正确的术语)。

我想用临时表中的另一个值替换未知值。我知道值的长度,所以我的想法是在LIKE语句中使用下划线。但是,以下内容无效:

UPDATE MyTable 
SET Name = 
    Replace(Name, '__SomeString', TempTable.value + ' SomeString')
FROM MyTable INNER JOIN TempTable 
    ON Name LIKE TempTable.Name

这是MS SQL 2000 FWIW。

编辑:为了尝试澄清它,看起来像LIKE语句中使用的下划线'_'通配符在字面上取代了replace函数。还有另外一种方法吗? 有什么想法吗?

4 个答案:

答案 0 :(得分:1)

UPDATE MyTable 
SET Name = 
CASE WHEN (Name like '_SomeString') 
     THEN TempTable.value + SUBSTRING(Name,2,LEN(Name)-1)
     ELSE Name END
FROM MyTable INNER JOIN TempTable     
ON MyTable.Name = TempTable.Name
WHERE MyTable.Name = 'TheNameToReplace' -- I don't know if it will be for a specific name hence the where...

这将替换名称字段中的'SomeString',其值为TempTable.value

这是你在寻找什么或其他什么?

答案 1 :(得分:1)

也许您可以使用stuff代替替换。您需要知道要替换字符的字符串中的起始位置,并且您需要知道要替换的表达式的长度。如果您不知道也许可以使用charindexpatindex来解决这个问题。

select stuff('A123', 1, 1, 'B ')

结果:

(No column name)
B 123

答案 2 :(得分:0)

显然,在REPLACE功能中不能使用通配符。这是我能找到的SO最接近的匹配:MySQL Search & Replace with WILDCARDS - Query虽然链接是针对MySQL的,但我相信MS SQL也是如此。

这里的其他答案都是问题的创造性解决方案,但我最终走了蛮力路线。

答案 3 :(得分:0)

这样的事情会起作用吗?

UPDATE mytable
SET field1 = 'A' +  SUBSTRING(field1,2,LEN(field1))
WHERE LEFT(field1) IN (0,1,2,3,4,5,6,7,8,9)