
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
POSITION
moż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, 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.