用PATINDEX替换固定开头和结尾的字符串

时间:2012-09-25 19:30:04

标签: sql-server 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 个答案:

答案 0 :(得分: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重复此操作。如果这不是您所追求的,请与需求一起更新您的问题(例如,向我们展示所需的结果)。