В 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'