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

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

Bạn có thể nhận thấy rằng MySQL có TIMEDIFF() và một SUBTIME() hàm số. Và bạn có thể nhận thấy rằng trong nhiều trường hợp, cả hai đều trả về cùng một kết quả. Vì vậy, bạn có thể tự hỏi sự khác biệt giữa hai chức năng này là gì?

Hãy cùng tìm hiểu.

Cú pháp

Trước tiên, hãy xem cú pháp của từng hàm.

SUBTIME ()

SUBTIME(expr1,expr2)

Trong đó expr1 là một biểu thức thời gian hoặc ngày giờ và expr2 là một biểu thức thời gian.

TIMEDIFF ()

TIMEDIFF(expr1,expr2)

Trong đó expr1expr2 là biểu thức thời gian hoặc ngày và giờ, nhưng cả hai phải cùng loại.

Sự khác biệt

Vì vậy, đây là sự khác biệt:

  • Khi sử dụng SUBTIME() , đối số thứ hai phải là biểu thức thời gian .
  • Khi sử dụng TIMEDIFF() đối số thứ hai có thể là biểu thức thời gian hoặc ngày tháng, nhưng trong cả hai trường hợp, nó phải cùng loại với biểu thức đầu tiên .

Ví dụ 1 - Cả hai Đối số đều là Giá trị "thời gian"

Dưới đây là so sánh của cả hai hàm, trong đó cả hai đối số đều là giá trị thời gian.

SELECT 
    TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF',
    SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';

Kết quả:

+----------+----------+
| TIMEDIFF | SUBTIME  |
+----------+----------+
| 01:00:00 | 01:00:00 |
+----------+----------+

Như mong đợi, cả hai hàm đều trả về cùng một kết quả.

Ví dụ 2 - Cả hai Đối số đều là Giá trị 'datetime'

Dưới đây là so sánh của cả hai hàm, trong đó cả hai đối số đều là giá trị ngày giờ.

SELECT 
    TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
    SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';

Kết quả:

+-----------+---------+
| TIMEDIFF  | SUBTIME |
+-----------+---------+
| 744:00:00 | NULL    |
+-----------+---------+

Trong trường hợp này, SUBTIME() đã trả về giá trị null vì đối số thứ hai của nó không phải là giá trị thời gian (nó là giá trị ngày giờ).

Ví dụ 3 - Đối số đầu tiên là "datetime", Đối số thứ hai là "time"

Ở đây, đối số đầu tiên là một giá trị ngày giờ. Đối số thứ hai là giá trị thời gian.

SELECT 
    TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF',
    SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';

Kết quả:

+----------+---------------------+
| TIMEDIFF | SUBTIME             |
+----------+---------------------+
| NULL     | 2021-02-01 01:00:00 |
+----------+---------------------+

Trong trường hợp này, TIMEDIFF() trả về giá trị null vì cả hai đối số đều thuộc loại khác nhau.

Ví dụ 4 - Đối số đầu tiên là "time", Đối số thứ hai là "datetime"

Và ở đây, chúng tôi hoán đổi nó xung quanh. Đối số đầu tiên là giá trị thời gian. Đối số thứ hai là giá trị ngày giờ.

SELECT 
    TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
    SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';

Kết quả:

+----------+---------+
| TIMEDIFF | SUBTIME |
+----------+---------+
| NULL     | NULL    |
+----------+---------+

Trong trường hợp này:

  • TIMEDIFF() trả về giá trị null vì cả hai đối số đều thuộc loại khác nhau.
    SUBTIME() đã trả về giá trị null vì nó chỉ chấp nhận một giá trị thời gian cho đối số thứ hai của nó.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn bảng tổng hợp MySQL với các cột động

  2. Tổng tích lũy trên một tập hợp các hàng trong mysql

  3. Cách đặt lại mật khẩu gốc trong MySQL 8.0

  4. Làm cách nào để nhanh chóng đổi tên cơ sở dữ liệu MySQL (thay đổi tên lược đồ)?

  5. Xóa bằng Tham gia trong MySQL