MySQL cung cấp một loạt các hàm để làm việc với ngày giờ, giúp bạn dễ dàng quản lý và thao tác với dữ liệu thời gian trong cơ sở dữ liệu. Các hàm này bao gồm việc trích xuất thông tin từ ngày giờ, tính toán khoảng thời gian, và chuyển đổi định dạng ngày giờ. Dưới đây là hướng dẫn chi tiết về các hàm ngày giờ phổ biến trong MySQL, kèm theo ví dụ minh họa rõ ràng.

1. Hàm NOW()

  • NOW() trả về ngày và giờ hiện tại của hệ thống.

Cú pháp:

NOW()

Ví dụ:

SELECT NOW() AS current_datetime;
-- Kết quả: '2024-09-08 15:30:00' (theo thời gian hệ thống)

Giải thích:

  • NOW() trả về ngày giờ hiện tại theo định dạng YYYY-MM-DD HH:MM:SS.

2. Hàm CURDATE()CURTIME()

  • CURDATE() trả về ngày hiện tại mà không có thời gian.
  • CURTIME() trả về thời gian hiện tại mà không có ngày.

Cú pháp:

CURDATE()
-- Hoặc
CURTIME()

Ví dụ:

SELECT CURDATE() AS current_date;
-- Kết quả: '2024-09-08'

SELECT CURTIME() AS current_time;
-- Kết quả: '15:30:00'

Giải thích:

  • CURDATE() trả về ngày hiện tại theo định dạng YYYY-MM-DD.
  • CURTIME() trả về thời gian hiện tại theo định dạng HH:MM:SS.

3. Hàm DATE()

  • DATE() trích xuất phần ngày từ một giá trị ngày giờ.

Cú pháp:

DATE(datetime)

Ví dụ:

SELECT DATE('2024-09-08 15:30:00') AS only_date;
-- Kết quả: '2024-09-08'

Giải thích:

  • DATE('2024-09-08 15:30:00') trả về chỉ phần ngày của giá trị ngày giờ.

4. Hàm TIME()

  • TIME() trích xuất phần thời gian từ một giá trị ngày giờ.

Cú pháp:

TIME(datetime)

Ví dụ:

SELECT TIME('2024-09-08 15:30:00') AS only_time;
-- Kết quả: '15:30:00'

Giải thích:

  • TIME('2024-09-08 15:30:00') trả về chỉ phần thời gian của giá trị ngày giờ.

5. Hàm YEAR(), MONTH(), DAY()

  • YEAR() trả về năm từ một giá trị ngày giờ.
  • MONTH() trả về tháng từ một giá trị ngày giờ.
  • DAY() trả về ngày trong tháng từ một giá trị ngày giờ.

Cú pháp:

YEAR(date)
-- Hoặc
MONTH(date)
-- Hoặc
DAY(date)

Ví dụ:

SELECT YEAR('2024-09-08') AS year_part;
-- Kết quả: 2024

SELECT MONTH('2024-09-08') AS month_part;
-- Kết quả: 9

SELECT DAY('2024-09-08') AS day_part;
-- Kết quả: 8

Giải thích:

  • YEAR('2024-09-08') trả về 2024.
  • MONTH('2024-09-08') trả về 9.
  • DAY('2024-09-08') trả về 8.

6. Hàm DATE_FORMAT()

  • DATE_FORMAT() định dạng một giá trị ngày giờ theo một định dạng cụ thể.

Cú pháp:

DATE_FORMAT(date, format)

Ví dụ:

SELECT DATE_FORMAT('2024-09-08 15:30:00', '%d/%m/%Y %H:%i:%s') AS formatted_date;
-- Kết quả: '08/09/2024 15:30:00'

Giải thích:

  • DATE_FORMAT('2024-09-08 15:30:00', '%d/%m/%Y %H:%i:%s') định dạng ngày giờ theo mẫu ngày/tháng/năm giờ:phút:giây.

7. Hàm ADDDATE()SUBDATE()

  • ADDDATE() thêm một khoảng thời gian vào một giá trị ngày giờ.
  • SUBDATE() trừ một khoảng thời gian từ một giá trị ngày giờ.

Cú pháp:

ADDDATE(date, INTERVAL value unit)
-- Hoặc
SUBDATE(date, INTERVAL value unit)

Ví dụ:

SELECT ADDDATE('2024-09-08', INTERVAL 10 DAY) AS new_date;
-- Kết quả: '2024-09-18'

SELECT SUBDATE('2024-09-08', INTERVAL 5 MONTH) AS new_date;
-- Kết quả: '2024-04-08'

Giải thích:

  • ADDDATE('2024-09-08', INTERVAL 10 DAY) thêm 10 ngày vào ngày 2024-09-08.
  • SUBDATE('2024-09-08', INTERVAL 5 MONTH) trừ 5 tháng từ ngày 2024-09-08.

8. Hàm DATEDIFF()

  • DATEDIFF() tính toán số ngày giữa hai giá trị ngày giờ.

Cú pháp:

DATEDIFF(date1, date2)

Ví dụ:

SELECT DATEDIFF('2024-09-08', '2024-09-01') AS days_diff;
-- Kết quả: 7

Giải thích:

  • DATEDIFF('2024-09-08', '2024-09-01') trả về số ngày giữa 2024-09-082024-09-01, là 7.

9. Hàm TIMESTAMPDIFF()

  • TIMESTAMPDIFF() tính toán sự khác biệt giữa hai giá trị ngày giờ theo đơn vị được chỉ định (giờ, ngày, tháng, năm, v.v.).

Cú pháp:

TIMESTAMPDIFF(unit, datetime1, datetime2)

Ví dụ:

SELECT TIMESTAMPDIFF(DAY, '2024-09-01', '2024-09-08') AS days_diff;
-- Kết quả: 7

SELECT TIMESTAMPDIFF(MONTH, '2024-01-01', '2024-09-08') AS months_diff;
-- Kết quả: 8

Giải thích:

  • TIMESTAMPDIFF(DAY, '2024-09-01', '2024-09-08') tính toán số ngày giữa hai ngày.
  • TIMESTAMPDIFF(MONTH, '2024-01-01', '2024-09-08') tính toán số tháng giữa hai ngày.

10. Hàm UNIX_TIMESTAMP()FROM_UNIXTIME()

  • UNIX_TIMESTAMP() trả về giá trị ngày giờ hiện tại dưới dạng timestamp Unix.
  • FROM_UNIXTIME() chuyển đổi timestamp Unix thành giá trị ngày giờ.

Cú pháp:

UNIX_TIMESTAMP()
-- Hoặc
FROM_UNIXTIME(timestamp)

Ví dụ:

SELECT UNIX_TIMESTAMP() AS current_timestamp;
-- Kết quả: Ví dụ '1694160600'

SELECT FROM_UNIXTIME(1694160600) AS datetime_from_timestamp;
-- Kết quả: '2024-09-08 15:30:00'

Giải thích:

  • UNIX_TIMESTAMP() trả về timestamp Unix hiện tại.
  • FROM_UNIXTIME(1694160600) chuyển đổi timestamp Unix 1694160600 thành giá trị ngày giờ tương ứng.

Các hàm ngày giờ trong MySQL giúp bạn quản lý và thao tác với dữ liệu thời gian một cách linh hoạt và hiệu quả. Với các hàm này, bạn có thể dễ dàng thực hiện các phép toán, trích xuất thông tin, và định dạng ngày giờ theo yêu cầu cụ thể của bạn.