假设实际数据不比所陈述的示例复杂,这应该在不求助于RegEx的情况下起作用:
DECLARE @posts TABLE( post_id INT NOT NULL IDENTITY(1, 1), post_text NVARCHAr(4000) NOT NULL, body NVARCHAr(2048) NULL);INSERT INTO @posts (post_text, body) VALUES (N'first', N'Visit [Google](http://google.com)');INSERT INTO @posts (post_text, body) VALUES (N'second', N'Get an [iPhone](http://www.apple.com)');INSERT INTO @posts (post_text, body) VALUES (N'third', N'[Example](http://example.com)');INSERT INTO @posts (post_text, body) VALUES (N'fourth', N'This is a message');INSERT INTO @posts (post_text, body) VALUES (N'fifth', N'I like cookies (chocolate chip)');INSERT INTO @posts (post_text, body) VALUES (N'sixth', N'[Frankie] says ''Relax''');INSERT INTO @posts (post_text, body) VALUES (N'seventh', NULL);SELECt p.post_text, SUBSTRINg( p.body, CHARINDEX(N'](', p.body) + 2, CHARINDEX(N')', p.body) - (CHARINDEX(N'](', p.body) + 2) ) AS [URL]FROM @posts pWHERe p.body like '%[%](http%)%' ESCAPE '';输出:
post_text URLfirst http://google.comsecond http://www.apple.comthird http://example.com
PS:
如果您 真的
想使用正则表达式,则只能通过SQLCLR完成。您可以编写自己的库或下载预完成的库。我写了一个这样的库SQL#,它具有包含RegEx函数的免费版本。但是,只有在找不到T-
SQL解决方案的情况下才应使用这些方法,到目前为止,这里不是这种情况。



