Trong MariaDB, TIMESTAMPDIFF()
là một hàm ngày và giờ được tích hợp sẵn trả về sự khác biệt giữa hai biểu thức ngày tháng hoặc ngày giờ.
Cú pháp
Cú pháp như sau:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Đơn vị unit
là một trong các giá trị sau:
-
MICROSECOND
-
SECOND
-
MINUTE
-
HOUR
-
DAY
-
WEEK
-
MONTH
-
QUARTER
-
YEAR
Các đơn vị có thể tùy chọn có tiền tố là SQL_TSI_
.
TIMESTAMPDIFF()
trả về datetime_expr2
- datetime_expr1
.
Một biểu thức có thể là ngày tháng và biểu thức kia là ngày giờ. Giá trị ngày được coi là có một phần thời gian của 00:00:00
khi cần thiết.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Kết quả:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01') | +------------------------------------------------+ | 28 | +------------------------------------------------+
Kết quả phủ định
Việc chuyển đổi ngày tháng sẽ dẫn đến kết quả tiêu cực:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Kết quả:
+------------------------------------------------+ | TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01') | +------------------------------------------------+ | -28 | +------------------------------------------------+
Giá trị ngày giờ
Dưới đây là một ví dụ về việc chuyển một giá trị ngày giờ:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Kết quả:
+--------+ | Result | +--------+ | 12 | +--------+
Tôi đã chỉ định HOUR
và do đó nó bỏ qua phần phút và giây.
Loại hỗn hợp
Dưới đây là một ví dụ về việc chuyển cả ngày tháng và giá trị ngày giờ:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Kết quả:
+--------+ | Result | +--------+ | 12 | +--------+
Như đã đề cập, các giá trị ngày được coi là có một phần thời gian của 00:00:00
.
Thêm SQL_TSI_
Tiền tố
Đơn vị có thể bao gồm một SQL_TSI_
tiền tố nếu được yêu cầu:
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Kết quả:
+--------+ | Result | +--------+ | 5 | +--------+
Micro giây
Dưới đây là một ví dụ trả về micro giây:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Kết quả:
+--------+ | Result | +--------+ | 123456 | +--------+
Đây là một trong những nơi mà micro giây không thực sự được chỉ định trong các giá trị ngày giờ:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Kết quả:
+------------+ | Result | +------------+ | 7200000000 | +------------+
Ngày hiện tại
Chúng ta có thể chuyển NOW()
một trong các đối số datetime để so sánh ngày và giờ hiện tại với một ngày khác:
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Kết quả:
+---------------------+------+ | NOW() | Diff | +---------------------+------+ | 2021-05-30 09:29:01 | -60 | +---------------------+------+
Ngày trống
Nếu một trong các ngày null
, kết quả là null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Kết quả:
+--------+ | Result | +--------+ | NULL | +--------+
Thiếu đối số
Gọi TIMESTAMPDIFF()
với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào, dẫn đến lỗi:
SELECT TIMESTAMPDIFF();
Kết quả:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
Và một ví dụ khác:
SELECT TIMESTAMPDIFF('2020-12-09');
Kết quả:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '10, '2020-12-09')' at line 1