
W pracy z bazami danych często stajemy przed wyzwaniem manipulacji tekstem. Jednym z przydatnych narzędzi w SQL jest funkcja POSITION, która pozwala znaleźć pozycję określonego ciągu znaków w innym ciągu tekstowym. Dzisiaj przyjrzę się dokładnie temu, jak działa POSITION w języku SQL, a także pokażę kilka praktycznych przykładów zastosowania.
Co to jest funkcja POSITION w SQL?
Funkcja POSITION w SQL służy do znalezienia pierwszego wystąpienia określonego podciągu w danym tekście. Zwraca ona pozycję (indeks), na której zaczyna się ten podciąg. Jeśli szukany fragment nie zostanie znaleziony, wynik będzie równy 0.
Składnia funkcji wygląda następująco:
POSITION('subtekst' IN 'tekst')
Oznacza to, że jeśli chcemy sprawdzić, na której pozycji znajduje się słowo „SQL” w ciągu „Uczenie SQL jest przydatne”, możemy użyć następującego zapytania:
SELECT POSITION('SQL' IN 'Uczenie SQL jest przydatne');
Funkcja zwróci wartość 9, gdyż litera „S” w „SQL” zaczyna się na dziewiątej pozycji.
Najważniejsze cechy funkcji POSITION
Oto kilka kluczowych aspektów funkcji POSITION:
- Funkcja zwraca numer pozycji liczony od 1, a nie od 0.
- Porównanie uwzględnia wielkość liter, w zależności od bazy danych.
- Jeśli podciąg nie zostanie znaleziony, zwracana jest wartość
0.
Przykłady zastosowania funkcji POSITION
1. Znalezienie pozycji znaku w tekście
Załóżmy, że chcemy znaleźć pozycję znaku „@” w adresie e-mail. Możemy to zrobić w ten sposób:
SELECT POSITION('@' IN 'test@example.com');
Rezultat to 5, ponieważ „@” znajduje się na piątej pozycji.
2. Wyszukiwanie frazy w dłuższym tekście
Czasami chcemy sprawdzić, czy dana fraza występuje w dużym bloku tekstu, np. w opisie produktu.
SELECT POSITION('Laptop' IN 'Nowoczesny Laptop z procesorem i7');
Wynikiem jest 11, jako że słowo „Laptop” zaczyna się na jedenastej pozycji.
3. Użycie w warunku WHERE
Załóżmy, że chcemy wyszukiwać rekordy, w których numer telefonu zawiera prefiks „48” (dla Polski). Możemy wykorzystać POSITION w klauzuli WHERE:
SELECT * FROM klienci WHERE POSITION('48' IN numer_telefonu) > 0;
To zapytanie zwróci wszystkich klientów, u których numer telefonu zawiera „48”.
4. Wyodrębnianie nazwisk z pełnego imienia
Jeśli mamy kolumnę zawierającą pełne imię i nazwisko, a chcemy wyodrębnić samo nazwisko, możemy połączyć POSITION z funkcją SUBSTRING:
SELECT SUBSTRING(imie_nazwisko FROM POSITION(' ' IN imie_nazwisko) + 1)
FROM pracownicy;
Powyższe zapytanie znajdzie pozycję spacji i zwróci wszystkie znaki po niej, czyli samo nazwisko.
Alternatywy dla funkcji POSITION
Chociaż funkcja POSITION jest przydatna, w różnych systemach baz danych można użyć innych metod:
- W MySQL zamiast
POSITIONmożna użyćLOCATE(). - W SQL Server można użyć
CHARINDEX(). - W PostgreSQL funkcja
STRPOS()działa podobnie jakPOSITION.
Oto przykłady dla różnych systemów:
| System baz danych | Funkcja | Przykład |
|---|---|---|
| PostgreSQL | STRPOS | SELECT STRPOS('abcde', 'c'); |
| MySQL | LOCATE | SELECT LOCATE('c', 'abcde'); |
| SQL Server | CHARINDEX | SELECT CHARINDEX('c', 'abcde'); |
Podsumowanie
Funkcja POSITION w SQL to przydatne narzędzie do wyszukiwania tekstu w ciągu znaków. Pozwala szybko określić lokalizację podciągu, co może być używane w analizie danych, filtrowaniu rekordów czy manipulacji tekstem.
Jeśli pracujesz w różnych systemach baz danych, warto poznać ich alternatywy, takie jak LOCATE, CHARINDEX czy STRPOS.
Inny ciekawy artykuł:
Jak działa REPLACE 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.

