首页 > 解决方案 > SQL Server 替换

问题描述

CREATE TABLE test (a VARCHAR(2000))

INSERT INTO test 
VALUES ('This is a AB_CD_test.dbo.ABC'), 
       ('This is a AB_CD.dbo.ABC')

运行Update查询前的表:

This is a AB_CD_test.dbo.ABC
This is a AB_CD.dbo.ABC
This is a [AB_CD].[dbo].[XYZ]

我正在尝试使用此查询替换AB_CD关键字AB_CD_test

UPDATE [US\AF83767].[test]
SET a = REPLACE(a, 'AB_CD', 'AB_CD_test')
WHERE a LIKE '%AB!_CD%' ESCAPE '!';

但正如预期的那样,数据更改为:

This is a AB_CD_test_test.dbo.ABC
This is a AB_CD_test.dbo.ABC
This is a [AB_CD_test].[dbo].[XYZ]

第二个很好,但第一个应该保持“这是 AB_CD_test.dbo.ABC”。

任何人都可以帮助查询不会更改第一行并且只查找“AB_CD”的出现。

对 SQL 比较陌生,非常感谢您的帮助。

标签: sqlsql-server

解决方案


目前尚不清楚您要防止什么。您是否只想在存在“Test”或“AB_CD”和“.dbo”之间的任何字符串时阻止替换

我猜是后者,所以我建议:

UPDATE [US\AF83767].[test]
SET a = REPLACE(a, 'AB_CD', 'AB_CD_test')
WHERE a LIKE '%AB!_CD.%' ESCAPE '!';

推荐阅读