1. Giới thiệu

Trong MySQL, kiểu dữ liệu ngày tháng rất quan trọng để lưu trữ thông tin về ngày, giờ và thời gian. Khi làm việc với cơ sở dữ liệu, có nhiều trường hợp bạn cần lưu trữ ngày sinh, ngày tạo đơn hàng, thời gian giao dịch, v.v. MySQL cung cấp nhiều loại kiểu dữ liệu để lưu trữ ngày tháng và thời gian nhằm phục vụ các nhu cầu khác nhau.

Bài viết này sẽ giúp bạn hiểu rõ về các kiểu dữ liệu ngày tháng phổ biến trong MySQL, các đặc điểm của chúng, và cách sử dụng chúng một cách hiệu quả.

2. Các kiểu dữ liệu ngày - tháng - năm trong MySQL

MySQL hỗ trợ nhiều kiểu dữ liệu ngày tháng và thời gian, bao gồm:

  • DATE: Lưu trữ ngày (không có thời gian), định dạng YYYY-MM-DD.
  • TIME: Lưu trữ thời gian (không có ngày), định dạng HH:MM:SS.
  • DATETIME: Lưu trữ cả ngày và thời gian, định dạng YYYY-MM-DD HH:MM:SS.
  • TIMESTAMP: Lưu trữ ngày và thời gian với múi giờ, thường được dùng để ghi nhận thời gian thay đổi dữ liệu.
  • YEAR: Lưu trữ năm, định dạng YYYY.

3. Cú pháp của các kiểu dữ liệu ngày - tháng - năm

Dưới đây là cú pháp cho từng kiểu dữ liệu ngày tháng trong MySQL.

a. DATE

Kiểu dữ liệu DATE lưu trữ thông tin ngày mà không có thời gian. Định dạng của kiểu dữ liệu này là YYYY-MM-DD, trong đó:

  • YYYY: Năm
  • MM: Tháng
  • DD: Ngày

Cú pháp:

shell
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    hire_date DATE
);

b. TIME

Kiểu dữ liệu TIME lưu trữ thời gian mà không có thông tin về ngày. Định dạng của kiểu TIMEHH:MM:SS, trong đó:

  • HH: Giờ
  • MM: Phút
  • SS: Giây

Cú pháp:

shell
CREATE TABLE schedules (
    schedule_id INT PRIMARY KEY,
    start_time TIME
);

c. DATETIME

Kiểu DATETIME lưu trữ cả ngày và thời gian. Định dạng của nó là YYYY-MM-DD HH:MM:SS.

Cú pháp:

shell
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_datetime DATETIME
);

d. TIMESTAMP

TIMESTAMP lưu trữ ngày và thời gian cùng với thông tin về múi giờ. Giá trị TIMESTAMP thường được tự động cập nhật khi có thay đổi trong bảng (ví dụ khi có bản ghi mới được thêm hoặc bản ghi cũ được cập nhật). Định dạng của TIMESTAMPYYYY-MM-DD HH:MM:SS.

Cú pháp:

shell
CREATE TABLE logs (
    log_id INT PRIMARY KEY,
    log_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • DEFAULT CURRENT_TIMESTAMP: Thiết lập thời gian hiện tại khi bản ghi mới được chèn vào bảng.

e. YEAR

Kiểu dữ liệu YEAR chỉ lưu trữ năm. Nó có định dạng YYYY và thường được sử dụng để lưu trữ năm sản xuất, năm phát hành, v.v.

Cú pháp:

shell
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    production_year YEAR
);

4. Ví dụ sử dụng các kiểu dữ liệu ngày - tháng - năm

a. Ví dụ 1: Sử dụng DATE để lưu trữ ngày sinh

shell
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    birth_date DATE
);

INSERT INTO employees (employee_id, first_name, last_name, birth_date)
VALUES (1, 'John', 'Doe', '1990-05-15');

Trong ví dụ này, cột birth_date lưu trữ thông tin ngày sinh theo định dạng YYYY-MM-DD.

b. Ví dụ 2: Sử dụng TIME để lưu trữ giờ làm việc

shell
CREATE TABLE shifts (
    shift_id INT PRIMARY KEY,
    start_time TIME,
    end_time TIME
);

INSERT INTO shifts (shift_id, start_time, end_time)
VALUES (1, '09:00:00', '17:00:00');

Cột start_timeend_time lưu trữ giờ bắt đầu và kết thúc của ca làm việc.

c. Ví dụ 3: Sử dụng DATETIME để lưu trữ thông tin đặt hàng

shell
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_datetime DATETIME
);

INSERT INTO orders (order_id, order_datetime)
VALUES (1, '2023-09-25 14:30:00');

Trong ví dụ này, cột order_datetime lưu trữ cả ngày và thời gian mà đơn hàng được thực hiện.

d. Ví dụ 4: Sử dụng TIMESTAMP để lưu trữ thời gian cập nhật bản ghi

shell
CREATE TABLE user_logs (
    log_id INT PRIMARY KEY,
    user_id INT,
    last_login TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO user_logs (log_id, user_id)
VALUES (1, 101);

Trong ví dụ này, cột last_login sẽ tự động ghi nhận thời gian hiện tại khi bản ghi mới được thêm vào bảng user_logs.

e. Ví dụ 5: Sử dụng YEAR để lưu trữ năm sản xuất

shell
CREATE TABLE cars (
    car_id INT PRIMARY KEY,
    model_name VARCHAR(50),
    production_year YEAR
);

INSERT INTO cars (car_id, model_name, production_year)
VALUES (1, 'Toyota Camry', 2020);

Trong ví dụ này, cột production_year lưu trữ năm sản xuất của ô tô.

5. So sánh các kiểu dữ liệu ngày - tháng - năm

Kiểu Dữ LiệuMô tảĐịnh dạngPhạm vi
DATELưu trữ ngày mà không có thời gianYYYY-MM-DD1000-01-01 đến 9999-12-31
TIMELưu trữ thời gian mà không có ngàyHH:MM:SS-838:59:59 đến 838:59:59
DATETIMELưu trữ cả ngày và thời gianYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 đến 9999-12-31
TIMESTAMPLưu trữ ngày và thời gian với múi giờYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 đến 2038-01-19 03:14:07
YEARLưu trữ nămYYYY1901 đến 2155

6. Các hàm ngày - tháng - năm thông dụng Trong MySQL

Ngoài việc lưu trữ dữ liệu ngày tháng, MySQL cung cấp nhiều hàm ngày tháng để thao tác với dữ liệu:

  • NOW(): Trả về ngày và thời gian hiện tại.
  • CURDATE(): Trả về ngày hiện tại (không có thời gian).
  • CURTIME(): Trả về thời gian hiện tại (không có ngày).
  • YEAR(): Lấy năm từ một giá trị ngày.
  • MONTH(): Lấy tháng từ một giá trị ngày.
  • DAY(): Lấy ngày từ một giá trị ngày.
  • DATE_ADD(): Cộng thêm một khoảng thời gian vào giá trị ngày.
  • DATE_SUB(): Trừ đi một khoảng thời gian từ giá trị ngày.

Ví dụ về các hàm ngày - tháng - năm:

shell
SELECT NOW();           -- Trả về ngày và thời gian hiện tại
SELECT CURDATE();       -- Trả về ngày hiện tại
SELECT CURTIME();       -- Trả về thời gian hiện tại
SELECT YEAR('2023-09-25'); -- Trả về năm 2023
SELECT DATE_ADD('2023-09-25', INTERVAL 10 DAY); -- Cộng 10 ngày vào ngày 2023-09-25

Kết luận

SQL Date Data Types cung cấp các cách lưu trữ thông tin về ngày và thời gian hiệu quả trong MySQL. Hiểu và sử dụng đúng kiểu dữ liệu ngày tháng là cực kỳ quan trọng trong việc xây dựng các hệ thống quản lý thông tin có chứa các thuộc tính liên quan đến thời gian.

Việc lựa chọn đúng kiểu dữ liệu như DATE, DATETIME, TIME, TIMESTAMP, hoặc YEAR sẽ giúp tối ưu hóa lưu trữ và truy vấn dữ liệu. Hãy thử áp dụng các ví dụ và thao tác với các kiểu dữ liệu này trong dự án thực tế để hiểu rõ hơn về cách chúng hoạt động!