从sql表列中的数据中删除子字符串

时间:2015-02-18 20:47:53

标签: sql sql-server-2008-r2 sql-update

我有一张桌子,在某一列内有一堆网址。我们不再需要表格中的某个网址,而不是手动更新每个数据记录,如果有办法通过更新查询删除某种类型的网址,我很好奇吗?

例如,存在具有以下URL的数据记录:

<a href="/publications/gss2007/gss2007_6879.ppt">Presentation (PowerPoint File)</a><br>  <a href="http://xxx.xx.xxx.xx:xxxx/ramgen/Ipam/2007/smil/7-09-am1.smil">Presentation (Webcast)</a>

我想删除smil url,因此数据只显示:

<a href="/publications/gss2007/gss2007_6879.ppt">Presentation (PowerPoint File)</a><br>

我想删除整个&#34; smil&#34;来自此字符串(来自)的url,以及来自其他记录的每个其他smil url(其他记录与不同的smil文件名相似)。有些记录可能有两个以上的网址,但是&#34; smil&#34;网址永远是最后一个。

1 个答案:

答案 0 :(得分:2)

保留一些评论历史记录,以便未来读者在实施解决方案之前了解决策点

是否始终遵循text<br>text

的模式
  

有几次有两个网址,他们排除<br>,然后有几次只是数据中的smil网址。

您还没有明确定义“smil”网址是什么。它在哪里有笑容吗?文件后缀是.smil?用/ smil /在路径?这些的一些组合?

您将要遇到的问题是,为了正确解决这个问题,您需要能够对html片段有所了解。这通常是.NET的东西,TSQL中的字符串匹配可能不足以满足您的需求。您可以尝试多次通过。如果它遵循text<br>text模式,您可以left(myCol, charindex(mycol, '<br>')) Mycol like '%smil%'并继续传递,直到您找到所有模式。

  

@billinkc:我知道你要去哪里,我在想是否有可能从<a href="xxx开始删除所有内容,因为那些“smil”链接都是以该字符串开头的。

并且永远不会出现<a href="http://xxx">streaming</a><br><a href="/local">foo</a>的情况?如果是,那么是的,使用<a href="http: / charindex搜索patindex(永远不会记住哪个),然后使用left / substring将其分割出来。

  

@billinkc:是的,总是如此。 “流媒体”网址始终是最后一个。好吧这比我想象的要容易,只需要一些外面的眼睛。谢谢。

鉴于我们知道我们不必担心在smil url 之后存在任何有用的内容,url将永远是外部的,我们可以安全地使用left / substring类似于

DECLARE @Source table
(
    SourceUrl varchar(200)
)
INSERT INTO @Source
(SourceUrl)
VALUES
('<a href="/publications/gss2007/gss2007_6879.ppt">Presentation (PowerPoint File)</a><br>  <a href="http://xxx.xx.xxx.xx:xxxx/ramgen/Ipam/2007/smil/7-09-am1.smil">Presentation (Webcast)</a>');

-- INSPECT THIS, IF APPROPRIATE THEN
SELECT
    S.SourceUrl AS Before
,   CHARINDEX('<a href="http://', S.SourceUrl) AS WhereFound
,   LEFT(S.SourceUrl, CHARINDEX('<a href="http://', S.SourceUrl) -1) AS After
FROM
    @Source AS S
WHERE
    S.SourceUrl LIKE '%smil%';

-- Only run this if you like the results of the above
UPDATE
    S
SET
    SourceUrl = LEFT(S.SourceUrl, CHARINDEX('<a href="http://', S.SourceUrl) -1)
FROM
    @Source AS S
WHERE
    S.SourceUrl LIKE '%smil%';