Giả sử dữ liệu thực tế không phức tạp hơn các ví dụ đã nêu, điều này sẽ hoạt động mà không cần dùng đến 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 '\';
Đầu ra:
post_text URL
first http://google.com
second http://www.apple.com
third http://example.com
Tái bút:
Nếu bạn thực sự muốn sử dụng Biểu thức chính quy, chúng chỉ có thể được thực hiện thông qua SQLCLR. Bạn có thể viết thư của riêng mình hoặc tải xuống các thư viện được thực hiện trước. Tôi đã viết một thư viện như vậy, SQL #
, có phiên bản Miễn phí bao gồm các chức năng của RegEx. Nhưng chúng chỉ nên được sử dụng nếu không tìm thấy giải pháp T-SQL, điều này cho đến nay không phải là trường hợp ở đây.