
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, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.