В MariaDB, CONVERT_TZ()
е вградена функция за дата и час, която преобразува стойност за дата и час от една часова зона в друга.
Когато извикате функцията, вие предавате три аргумента:времето, часовата зона за преобразуване от и часовата зона, която да преобразувате в .
Синтаксис
Синтаксисът е така:
CONVERT_TZ(dt,from_tz,to_tz)
Където dt
е изразът за дата и час, from_tz
е часовата зона за преобразуване от и to_tz
е часовата зона за преобразуване в .
Пример
Ето един пример:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');
Резултат:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 11:00:00 | +-------------------------------------------------------+
Тук оригиналната часова зона е +00:00 и ние я преобразувахме в +10:00.
Ето какво се случва, ако използваме различна начална часова зона:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');
Резултат:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 08:00:00 | +-------------------------------------------------------+
Наименувани часови зони
Могат да се използват наименувани часови зони, но това изисква различните таблици с часови зони да са заредени.
Ето какво се случва, когато таблиците с часовите зони не са попълнено:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Резултат:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | NULL | +-------------------------------------------------------------+
Резултатът е null
, тъй като в таблиците на часовите зони няма данни за часовите зони.
Ето отново същата заявка, но този път с данни в таблиците с часовите зони:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Резултат:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | 2021-05-10 13:45:00 | +-------------------------------------------------------------+
Стойности за дата и време са извън обхвата
Няма да се извърши преобразуване, ако стойността е извън поддържания TIMESTAMP
диапазон ('1970-01-01 00:00:01'
до '2038-01-19 05:14:07'
UTC) при преобразуване от from_tz
до UTC.
Пример:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');
Резултат:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2040-05-10 01:00:00 | +-------------------------------------------------------+
Невалидни аргументи
Ако някой от аргументите е невалиден, CONVERT_TZ()
връща null
.
Пример:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');
Резултат:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+
В този случай се опитах да конвертирам израза datetime в невалидна часова зона (+90:00
), и така null
беше върнат.
Нулеви аргументи
Ако някой аргумент е null
, резултатът е 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";
Резултат:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Липсващ аргумент
Извикване на CONVERT_TZ()
с грешен брой аргументи или без подаване на аргументи води до грешка:
SELECT CONVERT_TZ();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'