Chào mừng các bạn đã quay lại chuỗi bài viết SQL trong Data Analysis. Ở bài này chúng ta sẽ làm quen với các kiểu dữ liệu cơ bản trong PostgreSQL.
Trong PostgreSQL, các Data Type (kiểu dữ liệu) chủ yếu được sử dụng để xác định loại dữ liệu của mỗi cột trong bảng. Điều này rất quan trọng để đảm bảo tính nhất quán và đúng đắn khi lưu trữ và truy vấn dữ liệu.
Các kiểu dữ liệu cơ bản
- Boolean (Đúng hoặc sai)
- Các kiểu ký tự nội dung như: char, varchar và text.
- Các kiểu số: như số nguyên và số thực.
- Các kiểu thời gian như date (ngày), time (giờ), timestamp (ngày và giờ) và interval (chu kỳ: 3 giờ, 12 giờ…).
- Mảng để lưu trữ các chuỗi ký tự, nội dung, số, v.v.
Và còn nhiều kiểu dữ liệu khác nữa, nhưng chúng ta sẽ không đề cập trong bài viết này.
Boolean
Các giá trị 1, yes, y, t, true sẽ được chuyển đổi thành true.
Các giá trị 0, no, false, f sẽ được chuyển đổi thành false.
Khi bạn truy vấn dữ liệu từ một cột Boolean, PostgreSQL sẽ chuyển đổi lại các giá trị, ví dụ: t thành true, f thành false và khoảng trắng thành null.
Dữ liệu kí tự – chuỗi
PostgreSQL cung cấp ba kiểu dữ liệu ký tự: CHAR(n), VARCHAR(n) và TEXT.
CHAR(n) là ký tự có độ dài cố định với khoảng trắng được thêm vào. Nếu bạn chèn một chuỗi có độ dài nhỏ hơn độ dài của cột (nhỏ hơn n), PostgreSQL sẽ thêm khoảng trắng. Nếu bạn chèn một chuỗi có độ dài lớn hơn độ dài của cột, PostgreSQL sẽ phát ra lỗi.
VARCHAR(n) là chuỗi ký tự có độ dài có thể thay đổi. Với VARCHAR(n), bạn có thể lưu trữ tối đa n ký tự. PostgreSQL sẽ không thêm khoảng trắng khi chuỗi được lưu trữ ngắn hơn độ dài của cột.
TEXT là chuỗi ký tự có độ dài có thể thay đổi. Về lý thuyết, dữ liệu text có độ dài không giới hạn.
Dữ liệu số
Số nguyên
Có ba loại số nguyên trong PostgreSQL:
Small integer (cú pháp SMALLINT) là số nguyên có ký tự 2 byte, giới hạn từ -32.768 đến 32.767.
Integer (cú pháp INT) là số nguyên 4 byte, giới hạn từ -2.147.483.648 đến 2.147.483.647.
Serial tương tự như integer, chỉ khác là PostgreSQL sẽ tự động tạo và điền giá trị vào cột SERIAL. Kiểu này dành cho trường hợp bạn muốn PostgreSQL tự động sinh cột ID cho mỗi dòng dữ liệu mới.
Số thực
float(n) là số thực có độ chính xác ít nhất là n, tối đa là 8 byte.
real hoặc float8 là số thực 4 byte.
numeric hoặc numeric(p, s) là số thực với p là chữ số và s là số sau dấu thập phân. Kiểu numeric có đôi chút phức tạp. Nếu một số thực có số bên trái dấu chấm dài hơn p – s thì sẽ sinh ra lỗi. Ví dụ:
select 123456.726::numeric(6,2); => Throw error: A field with precision 6, scale 2 must round to an absolute value less than 10^4.
select 123456.726::numeric(8,2); => Result: 123456.73
Ngoài ra, số bên phải dấu chấm sẽ được làm tròn lên. Như trường hợp trên .726 sẽ được làm tròn lên .723.
Kiểu dữ liệu thời gian
Các kiểu dữ liệu thời gian cho phép bạn lưu trữ dữ liệu ngày và/hoặc giờ. PostgreSQL có năm kiểu dữ liệu thời gian chính:
DATE lưu trữ ngày tháng.
TIME lưu trữ giá trị thời gian trong ngày.
TIMESTAMP lưu trữ cả ngày và giờ.
TIMESTAMPTZ là kiểu dữ liệu timestamp có nhận biết múi giờ. Đây là viết tắt của timestamp with the time zone.
INTERVAL là kiểu dữ liệu chu kỳ.
Ví dụ:
select '2023-01-01'::date; -- => Result: 2023-01-01
select '2023-01-01'::timestamp; --=> Result: 2023-01-01 00:00:00.000
select '2023-01-01'::timestamp with time zone; -- => Result: 2023-01-01 00:00:00.000 +0700 Indochina timezone
select current_date - interval '3 month 3days'; -- => current_date = 2023-07-12 Result: 2023-04-09 00:00:00.000
Mảng (Danh sách)
Trong PostgreSQL, bạn có thể lưu trữ một mảng chuỗi, mảng số nguyên, v.v., trong các cột mảng. Mảng hữu ích trong một số tình huống như lưu trữ các ngày trong tuần, các tháng trong năm.
select array ['2023-07-01','2023-12-31'::date]; -- =>Result: {2023-07-01,2023-12-31}
Tổng kết
Chúng ta vừa đi qua một số kiểu dữ liệu cơ bản trong PostgreSQL. Thực tế, có nhiều kiểu dữ liệu khác nhau cho từng đề bài khác nhau. Tuy nhiên, để gói gọn cho phù hợp với chuỗi bài viết SQL trong Data Analysis thì chúng ta chỉ cần nắm các kiểu dữ liệu: Boolean – đúng sai, kiểu dữ liệu kí tự – nội dung, kiểu dữ liệu số – kiểu dữ liệu thời gian – kiểu dữ liệu mảng.
Với bài này sẽ là một trong các bài nền tảng cho chuỗi bài tiếp theo. Hẹn gặp lại các bạn ở các bài tiếp theo.
Xin cám ơn.