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ạngYYYY-MM-DD.TIME: Lưu trữ thời gian (không có ngày), định dạngHH:MM:SS.DATETIME: Lưu trữ cả ngày và thời gian, định dạngYYYY-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ạngYYYY.
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:
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 TIME là HH:MM:SS, trong đó:
- HH: Giờ
- MM: Phút
- SS: Giây
Cú pháp:
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:
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 TIMESTAMP là YYYY-MM-DD HH:MM:SS.
Cú pháp:
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:
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
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
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_time và end_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
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
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
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ệu | Mô tả | Định dạng | Phạm vi |
|---|---|---|---|
DATE | Lưu trữ ngày mà không có thời gian | YYYY-MM-DD | 1000-01-01 đến 9999-12-31 |
TIME | Lưu trữ thời gian mà không có ngày | HH:MM:SS | -838:59:59 đến 838:59:59 |
DATETIME | Lưu trữ cả ngày và thời gian | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 đến 9999-12-31 |
TIMESTAMP | Lưu trữ ngày và thời gian với múi giờ | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 đến 2038-01-19 03:14:07 |
YEAR | Lưu trữ năm | YYYY | 1901 đế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:
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-25Kế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!









