我有一张桌子,在某一列内有一堆网址。我们不再需要表格中的某个网址,而不是手动更新每个数据记录,如果有办法通过更新查询删除某种类型的网址,我很好奇吗?
例如,存在具有以下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;网址永远是最后一个。
答案 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%';