Jak działa PATINDEX w języku SQL? Przykłady zastosowania

Jak działa PATINDEX w języku SQL? Przykłady zastosowania

Jednym z przydatnych narzędzi w SQL Server do wyszukiwania wzorców w ciągu znaków jest funkcja PATINDEX. Pozwala ona określić pozycję pierwszego wystąpienia określonego wzorca w danej kolumnie tekstowej. Działa podobnie do CHARINDEX, ale z tą różnicą, że obsługuje wzorce zgodne z LIKE. W tym artykule wyjaśnię dokładnie, jak działa PATINDEX, oraz zaprezentuję kilka praktycznych przykładów jego zastosowania.

Podstawowa składnia funkcji PATINDEX

Funkcja PATINDEX zwraca pozycję pierwszego wystąpienia wzorca w podanym ciągu znaków. Oto jej podstawowa składnia:

SELECT PATINDEX ('%wzorzec%', kolumna) FROM nazwa_tabeli;

Gdzie:

  • '%wzorzec%' – określony wzorzec tekstowy do wyszukania (może zawierać znaki wieloznaczne jak % i _),
  • kolumna – nazwa kolumny tekstowej, w której szukamy wzorca.

Funkcja zwraca:

  • Numer pierwszego wystąpienia wzorca (indeks zaczyna się od 1),
  • 0, jeśli wzorzec nie został znaleziony,
  • NULL, jeśli kolumna zawiera NULL.

Prosty przykład zastosowania PATINDEX

Załóżmy, że mamy tabelę Produkty z kolumną Nazwa, która przechowuje nazwy produktów:

ID Nazwa
1 Komputer gamingowy
2 Monitor LED
3 Klawiatura mechaniczna

Jeśli chcemy znaleźć pozycję pierwszego wystąpienia słowa „gaming” w kolumnie Nazwa, możemy użyć:

SELECT PATINDEX('%gaming%', Nazwa) AS Pozycja FROM Produkty;

Wynik dla pierwszego wiersza będzie 10, ponieważ słowo „gaming” w „Komputer gamingowy” rozpoczyna się na dziesiątej pozycji.

Porównanie PATINDEX i CHARINDEX

Oprócz PATINDEX w SQL Server istnieje także funkcja CHARINDEX, która działa podobnie, ale nie obsługuje wzorców zgodnych z LIKE. Oto szybkie porównanie:

Funkcja Obsługa wzorców % i _ Przykład
PATINDEX Tak PATINDEX('%123%', KodProduktu)
CHARINDEX Nie CHARINDEX('123', KodProduktu)

Zaawansowane wykorzystanie PATINDEX

PATINDEX może być szczególnie przydatny w bardziej skomplikowanych scenariuszach, np.:

1. Weryfikacja obecności cyfr w tekście

Aby sprawdzić, czy ciąg zawiera cyfry:

SELECT Nazwa, 
       CASE WHEN PATINDEX('%[0-9]%', Nazwa) > 0 THEN 'Zawiera cyfry' 
            ELSE 'Brak cyfr' END AS Wynik
FROM Produkty;

2. Usuwanie znaków specjalnych

Możemy wykorzystać PATINDEX do znajdowania i usuwania znaków specjalnych:

SELECT Nazwa, 
       PATINDEX('%[^A-Za-z0-9 ]%', Nazwa) AS PozycjaPierwszegoZnakuSpecjalnego
FROM Produkty;

Ten fragment kodu znajdzie pozycję pierwszego znaku, który nie jest literą ani cyfrą.

Kiedy warto używać PATINDEX?

PATINDEX sprawdza się w następujących sytuacjach:

  • Gdy musimy wyszukać wzorzec zawierający znaki wieloznaczne,
  • Kiedy chcemy sprawdzić obecność pewnych znaków (np. cyfr, znaków specjalnych),
  • Gdy inne funkcje, jak CHARINDEX, nie pozwalają na poszukiwanie elastycznych wzorców.

Podsumowanie

PATINDEX to niezwykle przydatna funkcja SQL Server, która umożliwia wyszukiwanie wzorców w ciągach znaków za pomocą operatora LIKE. Dzięki obsłudze znaków wieloznacznych daje większą elastyczność niż CHARINDEX. Jest szczególnie użyteczna przy analizie tekstu, walidacji danych oraz czyszczeniu ciągów znaków.

 

Inny ciekawy artykuł:

Jak działa REGEXP w języku SQL? Przykłady zastosowania

KajoDataSpace