Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL DATEDIFF () so với TIMEDIFF ():Sự khác biệt là gì?

Hai hàm date có trong MySQL là DATEDIFF()TIMEDIFF() .

Cả hai chức năng đều hoạt động tương tự, nhưng có một số khác biệt có ý nghĩa.

Bảng sau đây tóm tắt sự khác biệt giữa hai chức năng này:

DATEDIFF() TIMEDIFF()
Kết quả được biểu thị dưới dạng giá trị tính bằng ngày. Kết quả được biểu thị dưới dạng giá trị thời gian.
Chỉ so sánh giá trị ngày tháng của các đối số của nó. So sánh giá trị thời gian của các đối số của nó.
Chấp nhận ngày tháng hoặc các biểu thức ngày và giờ. Chấp nhận biểu thức thời gian hoặc ngày và giờ.
Cả hai đối số có thể thuộc loại khác nhau (ngày tháng hoặc ngày giờ). Cả hai đối số phải cùng loại (thời gian hoặc ngày giờ).

Ví dụ 1 - Sự khác biệt Cơ bản

Dưới đây là một ví dụ chứng minh sự khác biệt cơ bản giữa các chức năng này.

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Kết quả:

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | 24:00:00 |
+----------+----------+

Vì vậy, chúng ta có thể thấy rằng DATEDIFF() trả về 1 , nghĩa là “1 ngày” và TIMEDIFF() trả lại 24:00:00 là đại diện thời gian của chính xác 1 ngày.

Ví dụ 2 - Chỉ định Giá trị Thời gian

Hãy xem điều gì sẽ xảy ra nếu chúng ta tăng giá trị thời gian của một trong các biến.

SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF';

Kết quả:

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | 36:15:35 |
+----------+----------+

Vì vậy, DATEDIFF() trả về kết quả tương tự như trong ví dụ trước. Điều này là do nó chỉ so sánh các giá trị ngày (nó bỏ qua bất kỳ giá trị thời gian nào).

TIMEDIFF() mặt khác, hàm so sánh thời gian và do đó nó trả về một kết quả chính xác hơn. Nó cho chúng ta thấy rằng có 36 giờ, 15 phút và 35 giây giữa hai giá trị ngày và giờ.

Ví dụ 3 - Loại đối số sai

Dưới đây là một ví dụ về những gì sẽ xảy ra khi bạn chuyển các loại đối số sai cho mỗi hàm.

SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00';
SELECT 
  DATEDIFF(@date1, @date2) AS 'DATEDIFF Date',
  DATEDIFF(@time1, @time2) AS 'DATEDIFF Time',
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date',
  TIMEDIFF(@time1, @time2) AS 'TIMEDIFF Time';

Kết quả:

+---------------+---------------+---------------+---------------+
| DATEDIFF Date | DATEDIFF Time | TIMEDIFF Date | TIMEDIFF Time |
+---------------+---------------+---------------+---------------+
|             1 |          NULL | 00:00:00      | 12:15:35      |
+---------------+---------------+---------------+---------------+

Kết quả đầu tiên và kết quả cuối cùng đều ổn vì các loại đối số chính xác đã được chuyển vào. Tuy nhiên, hai kết quả ở giữa có loại dữ liệu được truyền sai và do đó không thể tính được kết quả chính xác.

Ví dụ 4 - Loại đối số hỗn hợp

Đây là điều sẽ xảy ra nếu bạn cung cấp hai loại dữ liệu khác nhau cho mỗi chức năng.

SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00';
SELECT 
  DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF',
  TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF';

Kết quả:

+----------+----------+
| DATEDIFF | TIMEDIFF |
+----------+----------+
|        1 | NULL     |
+----------+----------+

Vì vậy, chúng ta có thể thấy rằng DATEDIFF() xử lý tốt các loại dữ liệu hỗn hợp (miễn là chúng là ngày tháng hoặc ngày giờ).

Tuy nhiên, TIMEDIFF() yêu cầu cả hai đối số phải cùng kiểu, vì vậy chúng tôi nhận được NULL , mặc dù cả hai đối số đều thuộc loại mà hàm hỗ trợ (thời gian và ngày và giờ).

Chúng tôi có thể xác nhận rằng cả hai loại trên thực tế đều được hỗ trợ bởi chức năng này với ví dụ sau:

SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@thetime1, @thetime2) AS 'time',
  TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';

Kết quả:

+----------+----------+
| time     | datetime |
+----------+----------+
| 02:00:00 | 48:00:00 |
+----------+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với máy chủ MySQL từ xa bằng SSL từ PHP

  2. Tạo ứng dụng web từ Scratch bằng Python Flask và MySQL:Phần 3

  3. Làm cách nào để kết nối ứng dụng Android với cơ sở dữ liệu MySQL?

  4. Sự khác biệt giữa =null và IS NULL là gì?

  5. Làm cách nào để lấy tất cả các giá trị trong một cột bằng PHP?