2014-07-08 41 views
0

我是t-sql的新手。我有一個存儲值爲URL的列。我想更改網址(字符串)的第一部分,並只用另一個網址替換此部分。例如,[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 

回答

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+'%'或類似的東西。

0

你想看看MSDN:REPLACE (Transact-SQL)

從文章: REPLACE (string_expression , string_pattern , string_replacement)

所以你會希望你的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 

這也是值得看看你在SQL Server中獲得String Functions (Transact-SQL)名單。如果@OldUrl文本在ProjectWorkspaceInternalHRef中間發現

0

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