2012-09-25 80 views
-1

我正在編寫一個查詢來查找/替換具有明確開始和結尾的模式,其間具有通配符。這是原來的URL:使用PATINDEX替換固定開頭和結尾的字符串

"></title><script src="http://www.weblearn.edu"></script><!-- 

這就是結果:

cript src="http://www.weblearn.edu"></script><!-- 

- 這是期望的結果: (無字符或空格)

- 哪有我取代了整個事情?謝謝你的幫助。

SELECT 

CASE 
WHEN PATINDEX('">%http%<!--', AcademicDishonestyDesc) > 0 THEN 
STUFF(AcademicDishonestyDesc, PATINDEX('">%http%<!--', AcademicDishonestyDesc), LEN('">%http%<!--'), '') 
END 
FROM AMS_CoursePolicyAcademicDishonesty 
WHERE  PATINDEX('">%http%<!--', AcademicDishonestyDesc) > 0 

GO 
+1

你向我們展示你現在得到的結果,你能展示你實際想要的結果嗎? (我們不知道「整個事情」是什麼意思。)你似乎試圖做的替換將導致無效的HTML。 –

+0

謝謝。實際上我試圖用'Nothing'替換整個字符串(原始URL),因爲這些URL是我們舊服務器上SQL注入的結果。 URL後面還有其他數據,我想保留這些數據。 – buck1112

+1

好吧,我的問題仍然存在:你可以編輯問題以顯示替換後字符串的樣子(而不是顯示當前查詢的內容)嗎? –

回答

0

好像做最安全和最簡單的事情 - 因爲你已經確定的URL - 將僅僅是從任何HTML標記刪除src屬性:

UPDATE dbo.table SET column = REPLACE(column, ' src="http://...bad script..."', ''); 

一個簡單的例子:

DECLARE @n TABLE (x VARCHAR(255)); 

INSERT @n(x) VALUES 
('...><script src="http://www.weblearn.edu"></script><!--'), 
('......><script src="http://www.weblearn.edu"></script><!--'), 
('..><script src="http://www.weblearn.edu"></script><!--'), 
('....><script src="somethingelse"></script><!--'); 

UPDATE @n SET x = REPLACE(x, ' src="http://www.weblearn.edu"', '') 
    WHERE x LIKE '% src="http://www.weblearn.edu"%'; 

SELECT x FROM @n; 

結果(空腳本標籤是HTML絕對沒問題):

...><script></script><!-- 
......><script></script><!--  
..><script></script><!-- 
....><script src="somethingelse"></script><!-- 

對每個錯誤的腳本URL重複。如果這不符合您的要求,請按照要求更新您的問題(例如向我們展示預期結果)。

相關問題