更新和替换字符串的一部分

602

我有一张表格,有两列,IDValue。我想要修改第二列中某些字符串的一部分。

表格示例:

ID            Value
---------------------------------
1             c:\temp\123\abc\111
2             c:\temp\123\abc\222
3             c:\temp\123\abc\333
4             c:\temp\123\abc\444

现在在 Value 字符串中不需要 123\。我尝试了 UPDATEREPLACE

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%123%', '')
WHERE ID <= 4
执行脚本时,SQL Server 没有报错,但也没有更新任何内容。为什么会这样?

11
它不会替换任何内容,因为通配符并不被视为通配符,而是作为字面值处理。 - stuhpa
9个回答

955

REPLACE中不需要使用通配符 - 它只会查找您在第二个参数中输入的字符串,因此以下内容应该可以正常工作:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4
如果要替换的列是 textntext 类型,你需要将其转换为 nvarchar。
UPDATE dbo.xxx
SET Value = REPLACE(CAST(Value as nVarchar(4000)), '123', '')
WHERE ID <=4

1
它工作得很好,但不适用于ntext类型 :( ...>> Msg 8116,级别16,状态1,第21行 - 参数数据类型ntext对于replace函数的参数1无效。 - Owidat
8
我刚刚找到了解决方法 :) ===> https://dev59.com/Zm855IYBdhLWcg3wcz1h - Owidat
3
等等,\是什么意思?它不是在转义 ' 字符并使得语句不正确吗? - Meekohi
这很有帮助。 - Stanley Okpala Nwosa
如果您的列类型为Text或NText,则此方法无法正常工作,请参考此答案 https://dev59.com/Zm855IYBdhLWcg3wcz1h - Adil H. Raza

78

尝试按照以下方式删除 % 字符

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4

68

为了在大型表格中使查询运行更快,并且不需要更新每一行,您也可以选择仅更新将被修改的行:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'

58

查询:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');

10
你有一个表格,其中有日期代码,是七个字符,类似于:
"32-1000"

现在您想要替换所有的


"32-"

随着

"14-"

您需要运行的SQL查询是:
Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)

8

如果您希望替换您的脚本,请使用以下代码:

update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%

请注意,此代码用于IT技术相关内容。

4
可以请您在源代码周围添加一些背景信息吗?仅有代码的回答很难理解。如果您能在帖子中添加更多信息,将有助于提问者和未来的读者。 - RBT
@RBT 这就是为什么 Reddit 上有关于 SO 的疯狂模因的原因。 - Tim Kretschmer

1
CREATE TABLE tbl_PersonalDetail
(ID INT IDENTITY ,[Date] nvarchar(20), Name nvarchar(20), GenderID int);

INSERT INTO Tbl_PersonalDetail VALUES(N'18-4-2015', N'Monay', 2),
                                     (N'31-3-2015', N'Monay', 2),
                                     (N'28-12-2015', N'Monay', 2),
                                     (N'19-4-2015', N'Monay', 2)

DECLARE @Date Nvarchar(200)

SET @Date = (SELECT [Date] FROM Tbl_PersonalDetail WHERE ID = 2)

Update Tbl_PersonalDetail SET [Date] = (REPLACE(@Date , '-','/')) WHERE ID = 2 

2
请解释一下你的答案是如何解决问题的,这将有助于每个人更清晰地理解你的解决方案并为将来的参考留下记录。 - Aziz

1
你应该使用以下的更新查询。
UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id IN(1, 2, 3, 4)

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id <= 4

以上任何一个查询都应该有效。

0

替换波斯语单词

UPDATE dbo.TblNews
SET keyWords = REPLACE(keyWords, '-', N'،')

帮助: dbo.TblNews -- 表名

keyWords -- 字段名


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接