
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 zawieraNULL.
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
Opanuj SQL z moim kursem!
Poznasz zarówno podstawy, jak i zaawansowane zapytania analityczne (CTE, subqueries, window functions). Nauczysz się pracować na różnych silnikach – na kursie pracujemy zarówno na MySQL, jak i na Postgres. Wszystko zainstalujemy na Twoim komputerze, plus dostaniesz mnóstwo zestawów danych do ćwiczeń.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, PowerBI, Tableau i Pythona z certyfikatami!
🟨 Ekskluzywana ale pomagająca sobie społeczność.
🟩 Ponad 75 godzin materiałów video.
🟨 Spotkania LIVE co miesiąc.
🟩 Mój osobisty mentoring.

