Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2012:извличане на Regex групи

Ако приемем, че действителните данни не са по-сложни от посочените примери, това трябва да работи, без да се прибягва до 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

PS:
Ако наистина искате да използвате регулярни изрази, те могат да бъдат направени само чрез SQLCLR. Можете да напишете свои собствени или да изтеглите готови библиотеки. Написах една такава библиотека, SQL# , която има безплатна версия, която включва функциите на RegEx. Но те трябва да се използват само ако T-SQL решение не може да бъде намерено, което досега не е случаят тук.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да коригирате „В списъка за избор може да бъде посочен само един израз…“ в SQL Server

  2. Как да предоставите на потребителите достъп само за четене до всички бази данни

  3. SQL коментари относно Създаване на таблица на SQL Server 2008

  4. Как да добавя първичен ключ auto_increment в базата данни на SQL Server?

  5. Как да актуализирате и поръчате с помощта на ms sql