Baza wiedzy / SQL

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

Aktualizacja 2 min czytania

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.

Kajo Rudziński

Newsletter KajoData

Zostańmy w kontakcie.

Piszę o analizie danych, uczeniu się i zmianie pracy. Dzielę się tym, co pomaga mi ogarniać technologię i zawodowe decyzje. Jeśli lubisz ten sposób myślenia, zapraszam do mojego newslettera.