2016-01-26 66 views
0

我需要匹配sql中的所有記錄並替換url匹配的地址http://www.test.com/等。我需要從標記的開頭移除到結束標記。SQL替換Url通配符

For example content may have 
same data here <a href="http://www.test.com/personal/car-leasing/kia/pro ceed/" rel="nofollow" 
target="_blank"><img alt="Contract hire" src="/cms-images/car-hire.jpg" /></a> and here 

我需要刪除

這些鏈接車各有不同,但都開始http://www.test.com/

我用下面的嘗試,但在我不能確定如何逃生REPLACE語句

SELECT content, REPLACE(content, '<a href="http://www.test.com/%','') 
from cms.dbo.tblpost 
where id = 47066 
+0

'REPLACE'沒有通配符。刪除'%'字符。 – jarlh

+1

你的RDBMS是什麼?根據您使用的產品,您可能可以調用REGEX_REPLACE或類似的東西。 –

+0

我需要匹配一切之後/直到雖然這就是爲什麼我認爲我應該使用通配符% – user1853454

回答

0
DECLARE @tblpost TABLE (
    ID INT NOT NULL IDENTITY PRIMARY KEY 
    ,content NVARCHAR(MAX) 
) 

INSERT INTO @tblpost (content) 
VALUES 
    (N'example www.test.com/personal') 
    ,(N'example content may have same data here <a href="http://www.test.com/personal/car-leasing/kia/pro ceed/" rel="nofollow" 
target="_blank"><img alt="Contract hire" src="/cms-images/car-hire.jpg" /></a> and here') 

DECLARE @Url NVARCHAR(4000) = N'www.test.com' 
    ,@OpenTagRev NCHAR(2) = N'a<'  -- Reversed open tag <a href 
    ,@CloseTag NCHAR(4) = N'</a>' 

;WITH SearchUrl as (
    SELECT ID, content, CHARINDEX (@Url ,content) UrlPos 
    FROM @tblpost 
) 
, SearchOpenCloseTag as (
    SELECT ID, content, UrlPos, CHARINDEX(@OpenTagRev, REVERSE(LEFT(content, UrlPos))) OpenTagOffset, CHARINDEX (@CloseTag ,content, UrlPos) CloseTagPos 
    FROM SearchUrl 
    WHERE UrlPos > 0 
) 

SELECT ID, content, STUFF(content, UrlPos - OpenTagOffset, CloseTagPos - UrlPos + OpenTagOffset + 4 /* 4 IS LEN(@CloseTag) */, N'') ReplContent 
FROM SearchOpenCloseTag 
WHERE OpenTagOffset > 0 
    AND CloseTagPos > 0