仅更新列中字符串值的一部分

时间:2014-07-08 10:48:12

标签: sql-server

我是t-sql的新手。我有一个列值存储值为url' s。我想更改网址的第一部分(字符串),并仅用另一个网址替换此部分。例如,[url//lsansps01/PMO/ITG0038 iSCOMBI Data Model Project][url2//lwazitest.lionsure.com/PMO/ITG0038 iSCOMBI Data Model Project]

这是我的更新查询:

UPDATE dbo.RowUpdates
SET ProjectWorkspaceInternalHRef = REPLACE ProjectWorkspaceInternalHRef, url//lsansps01/, url2//lwazitest.lionsure.com/PMO/ITG0038 iSCOMBI Data Model Project
FROM RowUpdates
WHERE ProjectWorkspaceInternalHRef LIKE url

3 个答案:

答案 0 :(得分:0)

REPLACE使用()而非逗号分隔的参数

UPDATE dbo.RowUpdates
SET ProjectWorkspaceInternalHRef = REPLACE(ProjectWorkspaceInternalHRef, 'url//lsansps01/', 'url2//lwazitest.lionsure.com/PMO/ITG0038 iSCOMBI Data Model Project')
FROM RowUpdates
WHERE ProjectWorkspaceInternalHRef LIKE url

另一个可疑的部分是LIKE url,因为它应该有'%'+url+'%'或类似的东西。

答案 1 :(得分:0)

您想查看MSDN:REPLACE (Transact-SQL)

来自文章: REPLACE ( string_expression , string_pattern , string_replacement )

因此您想要将替换语句更改为(请记住在字符串周围使用引号(')):

UPDATE dbo.RowUpdates
SET ProjectWorkspaceInternalHRef = 
    REPLACE(ProjectWorkspaceInternalHRef, 'url//lsansps01/', 'url2//lwazitest.lionsure.com/PMO/ITG0038 iSCOMBI Data Model Project')
FROM RowUpdates
WHERE ProjectWorkspaceInternalHRef LIKE url

还值得查看SQL Server中的String Functions (Transact-SQL)列表。

答案 2 :(得分:0)

如果在 ProjectWorkspaceInternalHRef 的中间找到 @OldUrl 文本,

Replace()函数将无法提供您的预期结果。

如果您只想替换前面的位,请在使用RIGHT()函数过滤后使用SUBSTRING()(或LEFT())函数。

DECLARE @OldUrl VARCHAR(500) = 'YourOdlUrl',
        @NewUrl VARCHAR(500) = 'YourNewUrl'

UPDATE dbo.RowUpdates
SET ProjectWorkspaceInternalHRef = @NewUrl + 
      RIGHT(ProjectWorkspaceInternalHRef,  LEN(ProjectWorkspaceInternalHRef) - LEN(@OldUrl ))
WHERE LEFT(ProjectWorkspaceInternalHRef, LEN(@OldUrl )) = @OldUrl