Hàm DATE trong SQL
Ngày SQL
Khi xử lý ngày, nhiệm vụ khó khăn nhất恐怕 là đảm bảo định dạng ngày được chèn vào phải khớp với định dạng của cột ngày trong cơ sở dữ liệu.
Nếu dữ liệu chỉ chứa phần ngày, việc chạy truy vấn sẽ không có vấn đề. Nhưng nếu涉及到 giờ, tình hình lại có chút phức tạp.
Trước khi thảo luận về sự phức tạp của truy vấn ngày, chúng ta hãy xem xét các hàm xử lý ngày nội bộ quan trọng nhất.
Hàm ngày/giờ MySQL
Bảng dưới đây liệt kê các hàm ngày/giờ nội bộ quan trọng nhất trong MySQL:
Hàm | Mô tả |
---|---|
NOW() | Trả về ngày/giờ 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 phần ngày của biểu thức ngày/giờ hoặc ngày/giờ |
EXTRACT() | Trả về phần riêng lẻ của ngày/giờ theo định dạng |
DATE_ADD() | Thêm một khoảng thời gian cụ thể vào ngày |
DATE_SUB() | Trừ một khoảng thời gian cụ thể từ ngày |
DATEDIFF() | Trả về số ngày giữa hai ngày |
DATE_FORMAT() | Hiển thị ngày/giờ bằng các định dạng khác nhau |
Hàm ngày/giờ SQL Server
Bảng dưới đây liệt kê các hàm ngày/giờ nội bộ quan trọng nhất trong SQL Server:
Hàm | Mô tả |
---|---|
GETDATE() | Trả về ngày/giờ hiện tại |
DATEPART() | Trả về phần riêng lẻ của ngày/giờ |
DATEADD() | Thêm hoặc trừ một khoảng thời gian cụ thể trong ngày |
DATEDIFF() | Trả về thời gian giữa hai ngày |
CONVERT() | Hiển thị ngày/giờ bằng các định dạng khác nhau |
Loại dữ liệu SQL Date
MySQL sử dụng các loại dữ liệu sau để lưu trữ giá trị ngày hoặc ngày/giờ trong cơ sở dữ liệu:
- DATE - Định dạng YYYY-MM-DD
- DATETIME - Định dạng: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - Định dạng: YYYY-MM-DD HH:MM:SS
- YEAR - Định dạng YYYY hoặc YY
SQL Server sử dụng các loại 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:MM:SS
- SMALLDATETIME - Định dạng: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - Định dạng: Số duy nhất
Xử lý ngày trong SQL
Nếu không liên quan đến phần thời gian, chúng ta có thể so sánh hai ngày một cách dễ dàng!
Giả sử chúng ta có bảng "Orders" sau đây:
OrderId | ProductName | OrderDate |
---|---|---|
1 | computer | 2008-12-26 |
2 | printer | 2008-12-26 |
3 | electrograph | 2008-11-12 |
4 | telephone | 2008-10-19 |
Hiện tại, chúng ta muốn chọn các bản ghi có OrderDate là "2008-12-26" từ bảng trên.
Chúng ta sử dụng câu lệnh SELECT sau:
SELECT * FROM Orders WHERE OrderDate='2008-12-26'
Kết quả tập hợp:
OrderId | ProductName | OrderDate |
---|---|---|
1 | computer | 2008-12-26 |
3 | electrograph | 2008-12-26 |
Giả sử "Orders" giống như sau (lưu ý phần thời gian trong cột "OrderDate"):
OrderId | ProductName | OrderDate |
---|---|---|
1 | computer | 2008-12-26 16:23:55 |
2 | printer | 2008-12-26 10:45:26 |
3 | electrograph | 2008-11-12 14:12:08 |
4 | telephone | 2008-10-19 12:56:10 |
Nếu chúng ta sử dụng câu lệnh SELECT trên:
SELECT * FROM Orders WHERE OrderDate='2008-12-26'
Vậy chúng ta không nhận được kết quả. Điều này là do truy vấn không chứa phần thời gian của ngày.
Lưu ý:Nếu bạn muốn làm cho truy vấn đơn giản và dễ bảo trì hơn, thì đừng sử dụng phần thời gian trong ngày trong ngày!