sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012:Regex-groepen extraheren

Ervan uitgaande dat de feitelijke gegevens niet complexer zijn dan de genoemde voorbeelden, zou dit moeten werken zonder toevlucht te nemen tot 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 '\';

Uitgang:

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

PS:
Als je echt reguliere expressies wilt gebruiken, kunnen ze alleen via SQLCLR worden gedaan. U kunt uw eigen bibliotheken schrijven of kant-en-klare bibliotheken downloaden. Ik heb zo'n bibliotheek geschreven, SQL# , dat een gratis versie heeft die de RegEx-functies bevat. Maar die moeten alleen worden gebruikt als er geen T-SQL-oplossing kan worden gevonden, wat hier tot nu toe niet het geval is.




  1. Hoe LOAD_FILE() werkt in MariaDB

  2. configureer de django met Oracle 11g database probleem

  3. java.sql.SQLException:geen geschikte driver gevonden voor jdbc:mysql://localhost:3306/dbname

  4. Oracle-datum naar Java-datum