修改一列,摆脱围绕ID的html

时间:2014-05-26 09:40:48

标签: sql regex tsql iframe

我有一张桌子,其中一列包含iFrame&的html在其中的外部视频,特别是像

<iframe src="http://host.com/videos/ID" otherattributes...></iframe>.

我需要更新当前列或创建一个新列(无关紧要)所以我所拥有的只是该视频的ID,我知道我可以使用正则表达式,但我真的很弱。 也许这样它就会找到字面字符内的内容:[videos /]和即将出现的ID [ID],但我不确定如何。

2 个答案:

答案 0 :(得分:0)

这应该有效,假设文本videos/没有出现在html中的任何其他地方。

update htmltable 
set id = SUBSTRING(SUBSTRING(html, 
                          CHARINDEX('videos/', html) + 7, 
                          LEN(html)
                          ), 
                 0, 
                 CHARINDEX('"', SUBSTRING(html, 
                                          CHARINDEX('videos/', html) + 7, 
                                          LEN(html)
                                         )
                          )
                )

这会更新表otherfield中名为htmltable的字段,其中网址中的ID为“123”。这是非常难看的代码,但SQL Server的字符串函数有限。

如果您对表结构有任何控制权,我建议您进行一些更改。视频ID应存储在自己的列中,与网址的其余部分分开。然后,当您需要检索网址时,您将连接这两个部分以获取整个网址。那将更加可维护。

答案 1 :(得分:0)

您可以使用CHARINDEX()功能:

update T SET
   VideoID=SUBSTRING(descr,
          charindex('/videos/',descr)+LEN('/videos/'),
          charindex('"',descr,charindex('/videos/',descr)+LEN('/videos/'))
          -(charindex('/videos/',descr)+LEN('/videos/')))

SQLFiddle demo