Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2012 :wyodrębnij grupy Regex

Zakładając, że rzeczywiste dane nie są bardziej złożone niż podane przykłady, powinno to działać bez uciekania się do 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 '\';

Wyjście:

post_text  URL
first      http://google.com
second     http://www.apple.com
third      http://example.com

PS:
Jeśli naprawdę chcą używać wyrażeń regularnych, można to zrobić tylko za pośrednictwem SQLCLR. Możesz napisać własne lub pobrać gotowe biblioteki. Napisałem jedną taką bibliotekę, SQL# , który ma darmową wersję, która zawiera funkcje RegEx. Ale należy ich używać tylko wtedy, gdy nie można znaleźć rozwiązania T-SQL, co jak dotąd nie ma miejsca w tym przypadku.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. W tabeli odniesienia nie ma kluczy podstawowych ani kandydujących, które pasują do listy kolumn odniesienia w kluczu obcym

  2. Czy kolumna TimeStamp jest unikalna?

  3. Szybkie wdrożenie aplikacji Visual Studio 2010 z bazą danych SQL

  4. Wybierz Records wiele razy z tabeli

  5. Najszybszy sposób na ustalenie, czy rekord istnieje