T-SQL SQL Server / Funkcja PATINDEX

Za pomocą funkcji PATINDEX możemy sprawdzić czy dany łańcuch znaków zawiera jakiś poszukiwany przez nas ciąg znaków. Naszym poszukiwanym ciągiem może być konkretny text lub wzorzec utworzony z symboli wieloznacznych np. wyrażony w postaci wyrażenia regularnego. Funkcja ta zwróci nam pozycję pierwszego znaku poszukiwanego tekstu (który może być także wzorcem) z pierwszego wystąpienia poszukiwanego ciągu znaków (lub ciągu który pasuje do zdefiniowanego wzorca). Funkcja PATINDEX() jest bardzo podobna w działaniu do funkcji CHARINDEX(). Różnica między tymi funkcjami polega na tym, że zdefiniowany wzorzec (poszukiwany tekst) w funkcji PATINDEX() może zawierać znakie wieloznaczne a w funkcji CHARINDEX() nie.

Przykład zastosowania funkcji PATINDEX

Sprawdź czy w ciągu znaków 'Pierwszy dokument ma numer PL1020304050, a drugi dokument ma postać PL6050403020' znajduje się podciąg znaków który jest zbudowany wg wzoru: dwie duże litery od A-Z + 10 cyfr i zwróć pozycję od której zaczyna się poszukiwany ciąg znaków w ciągu głownym oraz wytnij ten kawałek tekstu z łańcucha głównego.

— Dekarujemy sobie łańcuch główny
DECLARE
    @lancuch_glowny NVARCHAR(100) = 'Pierwszy dokument ma numer PL1020304050, a drugi dokument ma postać PL6050403020'

SELECT
     PATINDEX('%[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' , @lancuch_glowny) as [Pozycja pierwszego wystapienia lancucha]
    ,SUBSTRING(@lancuch_glowny , PATINDEX('%[A-Z][A-Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' , @lancuch_glowny),12) as [Skopiowany lancuch]


  SQL tutorial. AdventureWorks exercises SQL SERVER