MySQL làm việc với ngày tháng
Ngày của MySQL
Phần khó khăn nhất khi làm việc với ngày tháng là phải đảm bảo rằng định dạng ngày tháng bạn đang cố chèn phải khớp với định dạng của cột ngày tháng trong cơ sở dữ liệu.
Miễn là dữ liệu của bạn chỉ chứa phần ngày thì các truy vấn của bạn sẽ hoạt động như mong đợi. Tuy nhiên, nếu có liên quan đến phần thời gian thì mọi việc sẽ phức tạp hơn.
Các kiểu dữ liệu ngày của MySQL
MySQL đi kèm với các kiểu dữ liệu sau để lưu trữ ngày hoặc giá trị ngày/giờ trong cơ sở dữ liệu:
-
DATE
- định dạng YYYY-MM-DD -
DATETIME
- định dạng: YYYY-MM-DD HH:MI:SS -
TIMESTAMP
- định dạng: YYYY-MM-DD HH:MI:SS -
YEAR
- định dạng YYYY hoặc YY
Lưu ý: Kiểu dữ liệu ngày được đặt cho một cột khi bạn tạo bảng mới trong cơ sở dữ liệu của mình!
Làm việc với ngày tháng
Nhìn vào bảng sau:
Bảng đơn hàng
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
2 | Camembert Pierrot | 2008-11-09 |
3 | Mozzarella di Giovanni | 2008-11-11 |
4 | Mascarpone Fabioli | 2008-10-29 |
Bây giờ chúng tôi muốn chọn các bản ghi có Ngày đặt hàng là "2008-11-11" từ bảng trên.
Chúng tôi sử dụng câu lệnh SELECT
sau:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Tập kết quả sẽ trông như thế này:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Lưu ý: Hai ngày có thể dễ dàng so sánh nếu không có thành phần thời gian liên quan!
Bây giờ, giả sử bảng "Đơn hàng" trông như thế này (chú ý thành phần thời gian được thêm vào trong cột "Ngày đặt hàng"):
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 13:23:44 |
2 | Camembert Pierrot | 2008-11-09 15:45:21 |
3 | Mozzarella di Giovanni | 2008-11-11 11:12:01 |
4 | Mascarpone Fabioli | 2008-10-29 14:56:59 |
Nếu chúng ta sử dụng câu lệnh SELECT
giống như trên:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
chúng ta sẽ không nhận được kết quả nào! Điều này là do truy vấn chỉ tìm kiếm những ngày không có phần thời gian.
Mẹo: Để giữ cho các truy vấn của bạn đơn giản và dễ bảo trì, đừng sử dụng các thành phần thời gian trong ngày của bạn, trừ khi bạn phải làm vậy!