यह मानते हुए कि वास्तविक डेटा बताए गए उदाहरणों से अधिक जटिल नहीं है, यह 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 '\';
आउटपुट:
post_text URL
first http://google.com
second http://www.apple.com
third http://example.com
पुनश्च:
यदि आप वास्तव में नियमित अभिव्यक्तियों का उपयोग करना चाहते हैं, वे केवल SQLCLR के माध्यम से ही किए जा सकते हैं। आप अपना खुद का लिख सकते हैं या पहले से तैयार पुस्तकालयों को डाउनलोड कर सकते हैं। मैंने ऐसी ही एक लाइब्रेरी लिखी है, SQL#
, जिसका एक निःशुल्क संस्करण है जिसमें RegEx फ़ंक्शन शामिल हैं। लेकिन उनका उपयोग केवल तभी किया जाना चाहिए जब कोई T-SQL समाधान नहीं मिल सकता है, जो अब तक यहाँ नहीं है।