MySQL có PERIOD_DIFF()
chức năng cho phép bạn tìm sự khác biệt giữa hai khoảng thời gian. Các dấu chấm được cung cấp dưới dạng hai đối số riêng biệt và chúng phải ở định dạng YYMM hoặc YYYYMM .
Cú pháp
Cú pháp như sau:
PERIOD_DIFF(P1,P2)
Ở đâu P1
là khoảng thời gian đầu tiên và P2
là thứ hai.
Lưu ý rằng mặc dù hàm này dường như sử dụng ngày tháng, nhưng các đối số dấu chấm không phải là giá trị ngày tháng.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ cơ bản.
SELECT PERIOD_DIFF(199906, 199905);
Kết quả:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Vì vậy, trong trường hợp này, có 1 tháng chênh lệch giữa hai giai đoạn.
Ví dụ 2 - Kết quả phủ định
Đây là những gì sẽ xảy ra nếu chúng ta hoán đổi hai khoảng thời gian đó.
SELECT PERIOD_DIFF(199905, 199906);
Kết quả:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Như mong đợi, kết quả là một giá trị âm.
Ví dụ 3 - Năm hai chữ số
Bạn cũng có thể sử dụng năm hai chữ số (để định dạng là YYMM ). Đây là một ví dụ để chứng minh.
SELECT PERIOD_DIFF(9906, 9905);
Kết quả:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Ví dụ 4 - Sử dụng Ngày hiện tại
Dưới đây là một ví dụ dẫn xuất một trong các đối số khoảng thời gian từ ngày hiện tại. Khoảng thời gian đó sau đó được so sánh với một khoảng thời gian cố định.
SELECT CURDATE( ) AS 'Current Date', EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', 199901 AS 'Previous Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM CURDATE( )), 199901) AS 'Difference';
Kết quả:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Ví dụ 5 - Ví dụ về Cơ sở dữ liệu
Dưới đây là một ví dụ đưa ví dụ trước đó đi một bước xa hơn và so sánh khoảng thời gian hiện tại với khoảng thời gian bắt nguồn từ một ngày trong cơ sở dữ liệu.
USE sakila; SELECT EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', payment_date AS 'Payment Date', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Payment Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM payment_date), EXTRACT(YEAR_MONTH FROM CURDATE( ))) AS 'Difference' FROM payment WHERE payment_id = 1;
Kết quả:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+