ChatGPT解决这个技术问题 Extra ChatGPT

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

我有一个包含两列 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 不会报告错误,但它也不会更新任何内容。这是为什么?

它不会替换任何东西,因为通配符不被视为通配符,而是被视为文字。

M
Mauricio Gracia Gutierrez

您不需要在 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

它可以工作,但不适用于 ntext 类型 :( ...>> Msg 8116, Level 16, State 1, Line 21 - 参数数据类型 ntext 对于替换函数的参数 1 无效。
我刚刚找到了解决方案:) ===> stackoverflow.com/questions/4341613/…
等等,`? isn't that escaping the '` 字符是怎么回事?
这很有帮助
如果您的 Column 类型是 Text 或 NText,这将不起作用,请参阅此答案 stackoverflow.com/questions/4341613/…
R
Robert

尝试删除 % 字符,如下所示

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

x
xinux

为了使查询在不需要更新每一行的大表中运行得更快,您还可以选择只更新将被修改的行:

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

P
Parfait

询问:

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

R
RASKOLNIKOV

您有一张桌子,其中有七个字符的日期代码,例如

"32-1000"

现在你想全部替换

"32-"

"14-"

您必须运行的 SQL 查询是

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)

M
ManhNguyen

对于任何想要替换您的脚本的人。

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


来自审核队列:我可以请求您在源代码周围添加一些上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,它将帮助提问者和未来的读者。
@RBT 这就是为什么 reddit 有关于 SO 的疯狂模因
M
Mike Clark
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 

请说明您的答案是如何解决问题的,它将帮助大家更清楚地理解您的解决方案,以供将来参考。
V
Vasyl Senko

您应该使用以下更新查询

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

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


m
mirazimi

替换波斯语单词

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

help: dbo.TblNews -- 表名

关键字——字段名