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!