Praca z danymi tekstowymi to codzienność w bazach danych. Wyobraź sobie, że jesteś devem sklepu internetowego i masz bazę użytkowników. Musisz wyświetlić pełne imiona użytkowników na banerze powitalnym na stronie, np.: "Witamy, Otto Art!". Albo chcesz wystandaryzować wszystkie adresy email (np. zamienić je na małe litery). W takich przypadkach operacje na stringach są niezbędne.
PostgreSQL daje mega narzędzia do pracy z tekstem. Dzisiaj ogarniemy trzy podstawowe funkcje:
CONCAT()— łączenie stringów.UPPER()— zamiana stringa na wielkie litery.LOWER()— zamiana stringa na małe litery.
Praca z funkcją CONCAT()
Funkcja CONCAT() pozwala połączyć kilka stringów w jeden. Jest niezastąpiona, jeśli dane są w różnych kolumnach, a chcesz je połączyć do wyświetlenia.
Składnia
CONCAT(string1, string2, ..., stringN)
string1,string2,stringN— stringi albo kolumny, które chcesz połączyć.- Zwraca jeden string złożony ze wszystkich argumentów.
Przykład: obrabiamy imiona
Załóżmy, że mamy tabelę students:
| first_name | last_name |
|---|---|
| Otto | Art |
| Maria | Chi |
| Anna | Pal |
Nasze zadanie: wyświetlić pełne imiona studentów w formacie "Imię Nazwisko".
Zapytanie:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
Wynik:
| full_name |
|---|
| Otto Art |
| Maria Chi |
| Anna Pal |
Zwróć uwagę na ' ' między imieniem a nazwiskiem. To spacja, którą dodaliśmy, żeby rozdzielić stringi.
Ciekawostki
CONCAT() ignoruje NULL. Jeśli któryś z argumentów to NULL, po prostu go pomija. Jeśli jeszcze nie wiesz co to NULL, luz — wyjaśnimy to później.
Alternatywa dla CONCAT() to operator ||, np.:
SELECT first_name || ' ' || last_name AS full_name FROM students;
Zmiana wielkości liter: UPPER() i LOWER()
Wyobraź sobie, że masz adresy email wpisane przez userów w różnych wariantach: ivan@example.com, IVAN@EXAMPLE.COM. Żeby je wystandaryzować, często trzeba:
- zamienić tekst na jeden styl przed porównaniem (np.
lowercase). - wyróżnić ważne słowa (np.
UPPERCASEdla nagłówków).
UPPER(): tekst na wielkie litery
Funkcja UPPER() zamienia tekst na string z dużych liter.
Składnia:
UPPER(string)
string— string albo nazwa kolumny tekstowej.
Przykład:
W tabeli students pojawiła się kolumna email:
| first_name | last_name | |
|---|---|---|
| Otto | Art | otto@example.com |
| Maria | Chi | MARIA@EXAMPLE.com |
| Anna | Pal | anna.pal@mail.ru |
Chcemy wyświetlić adresy email wielkimi literami:
SELECT email, UPPER(email) AS email_upper
FROM students;
Wynik:
| email_upper | |
|---|---|
| otto@example.com | OTTO@EXAMPLE.COM |
| MARIA@EXAMPLE.com | MARIA@EXAMPLE.COM |
| anna.pal@gmail.com | ANNA.PAL@GMAIL.COM |
LOWER(): tekst na małe litery
Podobnie, funkcja LOWER() zamienia tekst na małe litery.
Składnia:
LOWER(string)
Przykład:
Zamieniamy adresy email na małe litery:
SELECT email, LOWER(email) AS email_lower
FROM students;
Wynik:
| email_lower | |
|---|---|
| otto@example.com | otto@example.com |
| MARIA@EXAMPLE.com | maria@example.com |
| anna.pal@gmail.com | anna.pal@gmail.com |
Praktyczne przykłady i case'y
Połączmy wszystko, czego się nauczyliśmy.
Tworzenie pełnego imienia wielkimi literami
Zapytanie:
SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;
Wynik:
| full_name_upper |
|---|
| OTTO ART |
| MARIA CHI |
| ANNA PAL |
Tu użyliśmy funkcji CONCAT(), żeby połączyć imię i nazwisko, i UPPER(), żeby zamienić tekst na wielkie litery.
Przykład: standaryzacja adresów email
Chcemy zamienić wszystkie adresy email na małe litery:
UPDATE students
SET email = LOWER(email);
Teraz wszystkie adresy email w tabeli wyglądają tak samo, niezależnie od oryginalnej wielkości liter.
Jak działa operator UPDATE dowiesz się w kolejnych wykładach.
Przygotowanie powitania dla użytkowników
Dodajmy do pełnych imion powitanie "Witamy":
SELECT CONCAT('Witamy, ', first_name, ' ', last_name, '!') AS greeting
FROM students;
Wynik:
| greeting |
|---|
| Witamy, Otto Art! |
| Witamy, Maria Chi! |
| Witamy, Anna Pal! |
Typowe błędy przy pracy z funkcjami tekstowymi
Jeśli pominiesz spację w CONCAT(), wynik może wyglądać dziwnie. Na przykład:
SELECT CONCAT(first_name, last_name) AS full_name
FROM students;
Wynik będzie: "OttoArt", "MariaChi". Zawsze dodawaj spację tam, gdzie trzeba.
Użycie NULL. Jeśli któryś z argumentów CONCAT() to NULL, string może być niepełny. Na przykład:
SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;
Jeśli middle_name = NULL, wynik będzie "Otto NULL Art". Żeby tego uniknąć, możesz użyć funkcji COALESCE():
SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;
Więcej o NULL i funkcji COALESCE() dowiesz się w najbliższych wykładach :P
GO TO FULL VERSION