SQL Dates
Phần khó khăn nhất khi làm việc với ngày tháng là đảm bảo rằng định dạng của ngày tháng bạn muốn chèn vào phải ăn khớp với định dạng ngày tháng của cột trong cơ sở dữ liệu.
Miễn là dữ liệu của bạn chỉ chứa các thông tin ngày tháng, truy vấn của bạn sẽ làm việc như mong đợi. Tuy nhiên, nếu một phần thời gian (giờ phút giây) có liên quan, nó sẽ trở nên phức tạp.
Trước khi nói về sự phức tạp của truy vấn ngày tháng, chúng ta sẽ xem thử các hàm quan trọng nhất được xây dựng để làm việc với ngày tháng.
Các hàm ngày tháng trong MySQL
Bảng dưới đây liệt kê tất cả các hàm quan trọng nhất được xây dựng trong MySQL:
Function | Mô tả |
---|---|
NOW() | Trả về ngày tháng và thời gian hiện tại |
CURDATE() | Trả về ngày hiện tại |
CURTIME() | Trả về thời gian hiện tại |
DATE() | Trích xuất các phần ngày của một ngày hoặc biểu thức ngày / thời gian |
EXTRACT() | Trả về một phần của ngày tháng |
DATE_ADD() | Thêm một khoảng thời gian nhất định vào một ngày |
DATE_SUB() | Bớt một khoảng thời gian nhất định từ một ngày |
DATEDIFF() | Trả về số lượng ngày giữa hai khoảng ngày tháng nào đó |
DATE_FORMAT() | Hiển thị dữ liệu ngày tháng/thời gian trong các định dạng khác |
Các hàm ngày tháng của SQL Server
Bảng dưới đây liệt kê các hàm quan trọng nhất được xây dựng trong SQL Server:
Function | Mô tả |
---|---|
GETDATE() | Trả về ngày tháng và thời gian hiện tại |
DATEPART() | Trả về một phần của ngày tháng/thời gian |
DATEADD() | Thêm hoặc bớt một khoảng thời gian nhất định từ một ngày |
DATEDIFF() | Trả về thời gian giữa hai ngày tháng |
CONVERT() | Hiển thị dữ liệu ngày tháng/thời gian trong các định dạng khác nhau |
Các kiểu dữ liệu ngày tháng trong SQL
MySQL đi kèm với các kiểu dữ liệu sau đây để lưu trữ giá trị ngày hoặc ngày tháng / thời gian trong cơ sở dữ liệu (Y là năm, M là tháng, D là ngày, H là giờ, MI là phút, SS là giây; YYYY là năm được lưu dưới dạng bốn chữ số, YY là năm được lưu dưới dạng hai chữ số; MM là lưu tháng dưới dạng hai chữ số, ví dụ tháng 7 sẽ là 07):
- 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 or YY
SQL Server đi kèm với các kiểu dữ liệu sau để lưu trữ giá trị ngày tháng hoặc ngày tháng/thời gian trong cơ sở dữ liệu:
- DATE – định dạng YYYY-MM-DD
- DATETIME – định dạng: YYYY-MM-DD HH:MI:SS
- SMALLDATETIME – định dạng: YYYY-MM-DD HH:MI:SS
- TIMESTAMP – định dạng: một số duy nhất
Lưu ý: Các kiểu ngày tháng lựa chọn cho cột khi bạn tạo bảng mới trong cơ sở dữ liệu!
Để có cái nhìn tổng quan về tất cả các kiểu dữ liệu có thể có, hãy truy cập vào thư mục các kiểu dữ liệu của chúng tôi.
SQL làm việc với ngày tháng
Bạn có thể so sánh hai ngày tháng một cách dễ dàng nếu không có thành phần thời gian tham gia!
Giả sử chúng ta có bảng “Orders” giống như thế này:
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 ta muốn chọn bản ghi bới OrderDate là “2008-11-11” từ bảng trên.
Chúng ta sử dụng câu lệnh SELECT sau:
SELECT * FROM Orders WHERE OrderDate='2008-11-11'
Kết quả trả về sẽ trông giống như thế này:
OrderId | ProductName | OrderDate |
---|---|---|
1 | Geitost | 2008-11-11 |
3 | Mozzarella di Giovanni | 2008-11-11 |
Bây giờ giả sử bảng “Orders” trông giống như thế này (lưu ý là phần gian có trong cột “OrderDate”):
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ùng câu lệnh SELECT 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à bởi câu truy vấn trên chỉ dành cho ngày tháng không có phần thời gian đi kèm.
Mẹo: Nếu bạn giữ câu truy vấn của bạn đơn giản và dễ dàng để bao trì, đừng đưa phần thời gian giờ phút giây vào trong ngày tháng của bạn.