Trong MariaDB, CONVERT_TZ()
là một hàm ngày và giờ được tích hợp sẵn để chuyển đổi giá trị ngày giờ từ múi giờ này sang múi giờ khác.
Khi bạn gọi hàm, bạn chuyển ba đối số:thời gian, múi giờ để chuyển đổi từ và múi giờ để chuyển đổi thành .
Cú pháp
Cú pháp như sau:
CONVERT_TZ(dt,from_tz,to_tz)
Ở đâu dt
là biểu thức ngày giờ, from_tz
là múi giờ để chuyển đổi từ và to_tz
là múi giờ để chuyển đổi thành .
Ví dụ
Đây là một ví dụ:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');
Kết quả:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 11:00:00 | +-------------------------------------------------------+
Ở đây, múi giờ ban đầu là +00:00 và chúng tôi đã chuyển đổi nó thành +10:00.
Dưới đây là những gì sẽ xảy ra nếu chúng tôi sử dụng múi giờ xuất phát khác:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');
Kết quả:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 08:00:00 | +-------------------------------------------------------+
Múi giờ được đặt tên
Các múi giờ đã đặt tên có thể được sử dụng, nhưng điều này yêu cầu phải tải các bảng múi giờ khác nhau.
Đây là điều xảy ra khi bảng múi giờ không được điền:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Kết quả:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | NULL | +-------------------------------------------------------------+
Kết quả là null
, bởi vì không có dữ liệu múi giờ trong bảng múi giờ.
Sau đây là cùng một truy vấn, nhưng lần này với dữ liệu trong các bảng múi giờ:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Kết quả:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | 2021-05-10 13:45:00 | +-------------------------------------------------------------+
Giá trị ngày giờ nằm ngoài phạm vi
Sẽ không có chuyển đổi nào nếu giá trị nằm ngoài TIMESTAMP
được hỗ trợ phạm vi ('1970-01-01 00:00:01'
tới '2038-01-19 05:14:07'
UTC) khi được chuyển đổi từ from_tz
sang UTC.
Ví dụ:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');
Kết quả:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2040-05-10 01:00:00 | +-------------------------------------------------------+
Đối số không hợp lệ
Nếu bất kỳ đối số nào không hợp lệ, CONVERT_TZ()
trả về null
.
Ví dụ:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');
Kết quả:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+
Trong trường hợp này, tôi đã cố chuyển đổi biểu thức datetime thành múi giờ không hợp lệ (+90:00
), và như vậy null
đã được trả lại.
Đối số rỗng
Nếu bất kỳ đối số nào là null
, kết quả là null
:
SELECT
CONVERT_TZ(null, '+00:00', '+90:00') AS "1",
CONVERT_TZ('2021-05-10 01:00:00', null, '+90:00') AS "2",
CONVERT_TZ('2021-05-10 01:00:00', '+00:00', null) AS "3";
Kết quả:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Thiếu đối số
Đang gọi CONVERT_TZ()
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 CONVERT_TZ();
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'