実際のデータが前述の例よりも複雑ではないと仮定すると、これは正規表現に頼ることなく機能するはずです:
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 '\';
出力:
post_text URL
first http://google.com
second http://www.apple.com
third http://example.com
PS:
あなたが本当になら 正規表現を使用したい場合は、SQLCLRを介してのみ実行できます。独自のライブラリを作成することも、事前に作成されたライブラリをダウンロードすることもできます。そのようなライブラリの1つ、 SQL#
を作成しました。 、RegEx関数を含む無料バージョンがあります。ただし、これらはT-SQLソリューションが見つからない場合にのみ使用する必要があります。これまでのところ、ここではそうではありません。