En supposant que les données réelles ne sont pas plus complexes que les exemples indiqués, cela devrait fonctionner sans recourir à 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 p
WHERE p.body like '%\[%](http%)%' ESCAPE '\';
Sortie :
post_text URL
first http://google.com
second http://www.apple.com
third http://example.com
PS :
Si vous vraiment souhaitez utiliser des expressions régulières, elles ne peuvent être effectuées que via SQLCLR. Vous pouvez écrire les vôtres ou télécharger des bibliothèques prédéfinies. J'ai écrit une telle bibliothèque, SQL#
, qui a une version gratuite qui inclut les fonctions RegEx. Mais ceux-ci ne doivent être utilisés que si une solution T-SQL est introuvable, ce qui n'est pas le cas ici jusqu'à présent.