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 đó expr1
và expr2
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ó.