Bài học theo mô-đun (4/4)
Chuyển đổi CAST và loại
SQL được định kiểu mạnh: mỗi cột có một kiểu (INTEGER, TEXT,
NUMERIC, DATE, TIMESTAMP…) và nhiều thao tác yêu cầu các loại
để khớp. Khi họ không làm như vậy — hoặc khi bạn muốn định dạng một giá trị
theo cách khác - bạn sử dụng cast.
Hai cú pháp tương đương
-- SQL standard:
CAST(123 AS TEXT)
-- PostgreSQL shorthand (più comune nella pratica):
123::textHai hình thức này giống hệt nhau. Viết tắt ::type nhỏ gọn hơn và
xâu chuỗi độc đáo với các biểu thức khác:
SELECT ordered_at::date AS day,
(oi.quantity * oi.unit_price)::numeric(10,2) AS total,
id::text || ' - ' || email AS label
FROM …;Các diễn viên hữu ích trên tập dữ liệu
TIMESTAMP → DATE ordered_at::date
NUMERIC → INTEGER price::int -- tronca!
INTEGER → NUMERIC quantity::numeric -- per evitare div. intera
INTEGER → TEXT id::text -- per concatenare con ||
TEXT → DATE '2024-03-05'::date
NUMERIC → TEXT price::text -- per LIKE su numeriKhi diễn viên có thể thất bại
SELECT 'abc'::int; -- ERRORE: invalid input syntax for type integer
SELECT '12.5'::int; -- ERRORE: invalid input syntax for type integer
SELECT 12.5::int; -- 12 (cast numerico-numerico: arrotonda)Các lần truyền từ chuỗi → số hoặc chuỗi → ngày là rủi ro nhất:
chúng gây ra lỗi nếu chuỗi không khớp chính xác với mong đợi
định dạng. Trong sản xuất, trên dữ liệu ngoài, tốt nhất nên xác thực trước
với TRIM / LOWER / biểu thức chính quy.
Truyền và ĐẶT HÀNG THEO
Một trường hợp tạo ra các lỗi nhỏ: sắp xếp các số được lưu dưới dạng văn bản.
SELECT '2', '10', '1' ORDER BY 1; -- '1', '10', '2' (alfabetico!)Giải pháp: truyền vào bên trong ORDER BY:
SELECT code FROM articles ORDER BY code::int;Hãy thử nó
Đối với mỗi đơn hàng, hiển thị id và ngày (chỉ phần ngày của order_at, thuộc loại ngày). Hai cột. Đặt hàng theo id.
Hiển thị gợi ý
Truyền DẤU THỜI GIAN → DATE giảm thời gian: order_at::date.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Đối với mỗi khách hàng, hãy hiển thị một cột nhãn nối id và email được phân tách bằng ' - ' (ví dụ: '1 - alice.rossi@example.com'). Đặt hàng theo id.
Hiển thị gợi ý
|| toán tử yêu cầu các toán hạng cùng loại: truyền id vào văn bản là cách rõ ràng nhất.
Giải pháp khả dụng sau 3 lần thử