【问题标题】:Replacing string with fixed beginning and end with PATINDEX用 PATINDEX 替换具有固定开头和结尾的字符串
【发布时间】:2012-09-25 19:30:04
【问题描述】:

我正在编写一个查询来查找/替换一个有明确的开始和结束的模式,中间有通配符。这是原始网址:

  "></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

【问题讨论】:

  • 你向我们展示了你现在得到的结果,你能展示你真正想要的结果吗? (我们不知道“整个事情”是什么意思。)您似乎试图进行的替换会导致 HTML 无效。
  • 谢谢。我实际上是在尝试用“nothing”替换整个字符串(原始 URL),因为这些 URL 是我们旧服务器上 SQL 注入的结果。 URL 后面还有其他数据,我想保留这些数据。
  • 好的,我的问题仍然存在:您可以编辑问题以显示替换后字符串的外观(而不是显示当前查询的功能)吗?

标签: sql-server patindex


【解决方案1】:

似乎最安全和最简单的做法——因为你已经识别了 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 重复。如果这不是您所追求的,请根据要求更新您的问题(例如,向我们展示所需的结果)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2012-12-03
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多