我可能在这里遗漏了一些非常明显的东西,但这对于在谷歌搜索来说是个熊(也许我没有正确的术语)。
我想用临时表中的另一个值替换未知值。我知道值的长度,所以我的想法是在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函数。还有另外一种方法吗? 有什么想法吗?
答案 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代替替换。您需要知道要替换字符的字符串中的起始位置,并且您需要知道要替换的表达式的长度。如果您不知道也许可以使用charindex或patindex来解决这个问题。
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)