CodeGym /Kursy /SQL SELF /Konwersja typów danych z CAST() i :: — przykłady i niuans...

Konwersja typów danych z CAST() i :: — przykłady i niuanse

SQL SELF
Poziom 5, Lekcja 3
Dostępny

Wyobraź sobie, że chcesz dodać do siebie dwie liczby, ale jeden z parametrów jest zapisany jako string. Albo na przykład chcesz filtrować dane po roku, ale data jest u ciebie zapisana w pełnym formacie z godziną. PostgreSQL raczej nie będzie zadowolony z takiego pomysłu i będziesz musiał sam ogarnąć konwersję do odpowiedniego typu.

Konwersja typów pomaga:

  • Uprościć przetwarzanie danych, żeby można było ich użyć w obliczeniach.
  • Stworzyć bardziej czytelne i uporządkowane dane do eksportu lub analizy.
  • Eliminować błędy związane z niezgodnością typów danych.

Podstawy konwersji typów danych: CAST() i ::

1. CAST() — starszy brat każdej konwersji

Funkcja CAST() to taki "oficjalny" sposób na konwersję wartości z jednego typu danych na inny. Działa jak uniwersalny tłumacz.

Składnia:

CAST(wartość AS docelowy_typ_danych)

Przykład 1: Konwersja stringa na liczbę.

SELECT CAST('123' AS INTEGER); -- Wynik: 123

Przykład 2: Konwersja liczby na stringa.

SELECT CAST(123 AS TEXT); -- Wynik: '123'

Przykład 3: Konwersja daty na stringa.

SELECT CAST(NOW() AS TEXT); -- Wynik: '2023-10-25 15:00:00.000000'

2. Operator :: — zwięzła alternatywa

Jeśli CAST() wydaje ci się trochę rozwlekły, PostgreSQL ma też składnię ::. To skrócony sposób konwersji, mega popularny przez swoją prostotę.

Składnia:

wartość::docelowy_typ_danych

Przykład 1: Konwersja stringa na liczbę.

SELECT '123'::INTEGER; -- Wynik: 123

Przykład 2: Konwersja liczby na stringa.

SELECT 123::TEXT; -- Wynik: '123'

Przykład 3: Konwersja daty na stringa.

SELECT NOW()::TEXT; -- Wynik: '2023-10-25 15:00:00.000000'

Prawdziwe przykłady użycia konwersji typów

1. Konwersja liczb i stringów

Załóżmy, że masz tabelę students, gdzie kolumna student_id jest przechowywana jako string, ale chcesz ją porównać z wartością liczbową. Bez konwersji nic z tego nie będzie.

student_id first_name last_name birth_date grade
101 Alex Lin 2008-03-15 9
102 Maria Chi 2009-07-22 8
103 Axel Ivy 2007-11-30 10
104 Nat Sok 2008-01-18 9
105 Pol Frez 2009-05-05 8

Dlatego w zapytaniu trzeba jawnie przekonwertować kolumnę student_id na liczbę:

SELECT *
FROM students
WHERE student_id::INTEGER = 101;

Analogiczne zapytanie z użyciem CAST():

SELECT *
FROM students
WHERE CAST(student_id AS INTEGER) = 101;

Konwersja dat

Kiedy trzeba wyciągnąć część daty albo przekonwertować ją na stringa, konwersja typów też się przydaje. Na przykład masz tabelę courses z datami rozpoczęcia kursów w kolumnie start_date.

course_id course_name start_date
1 Wprowadzenie do Python 2025-01-15
2 Podstawy SQL 2025-03-01
3 Analiza danych 2025-05-10
4 Web-rozwoj 2025-06-20
5 Uczenie maszynowe 2025-09-05

Przykład: Wyciągnij rok jako liczbę.

SELECT start_date::DATE, start_date::TEXT, start_date::TIMESTAMP
FROM courses;

Wynik będzie taki:

start_date (DATE) start_date (TEXT) start_date (TIMESTAMP)
2025-01-15 2025-01-15 2025-01-15 00:00:00
2025-03-01 2025-03-01 2025-03-01 00:00:00
2025-05-10 2025-05-10 2025-05-10 00:00:00
2025-06-20 2025-06-20 2025-06-20 00:00:00
2025-09-05 2025-09-05 2025-09-05 00:00:00

Przykład: Konwertuj datę na "czysty string".

SELECT TO_CHAR(start_date, 'DD-MM-YYYY')

Wynik będzie taki:

to_char
15-01-2025
01-03-2025
10-05-2025
20-06-2025
05-09-2025

Błąd: Kiedy konwersja się sypie?

Sztuczka z konwersją danych nie zawsze działa. Czasem PostgreSQL jasno daje znać, że "nie kuma" twoich intencji. Klasyczny przykład: próbujesz przekonwertować tekst, który wygląda jak liczba, ale w środku są niepotrzebne znaki.

Przykład błędu:

SELECT '123abc'::INTEGER;
-- BŁĄD:  invalid input syntax for type integer: "123abc"

Żeby uniknąć takich akcji, upewnij się, że dane naprawdę da się przekonwertować na docelowy typ wcześniej. Możesz na przykład użyć wyrażeń regularnych albo dodatkowych sprawdzeń.

2
Zadanie
SQL SELF, poziom 5, lekcja 3
Niedostępne
Konwersja stringa na liczbę
Konwersja stringa na liczbę
2
Zadanie
SQL SELF, poziom 5, lekcja 3
Niedostępne
Konwersja dat i obliczenia
Konwersja dat i obliczenia
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION