En MariaDB, CONVERT_TZ()
es una función de fecha y hora incorporada que convierte un valor de fecha y hora de una zona horaria a otra.
Cuando llama a la función, pasa tres argumentos:la hora, la zona horaria para convertir desde y la zona horaria para convertir a .
Sintaxis
La sintaxis es así:
CONVERT_TZ(dt,from_tz,to_tz)
Donde dt
es la expresión de fecha y hora, from_tz
es la zona horaria para convertir desde y to_tz
es la zona horaria para convertir a .
Ejemplo
He aquí un ejemplo:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');
Resultado:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 11:00:00 | +-------------------------------------------------------+
Aquí, la zona horaria original es +00:00 y la convertimos a +10:00.
Esto es lo que sucede si usamos una zona horaria de inicio diferente:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');
Resultado:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 08:00:00 | +-------------------------------------------------------+
Zonas horarias con nombre
Se pueden usar zonas horarias con nombre, pero esto requiere que se hayan cargado las distintas tablas de zonas horarias.
Esto es lo que sucede cuando las tablas de zonas horarias no lo son poblado:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Resultado:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | NULL | +-------------------------------------------------------------+
El resultado es null
, porque no hay datos de zonas horarias en las tablas de zonas horarias.
Aquí está la misma consulta de nuevo, pero esta vez con datos en las tablas de zonas horarias:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Resultado:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | 2021-05-10 13:45:00 | +-------------------------------------------------------------+
Valores de fecha y hora fuera de rango
No se realizará ninguna conversión si el valor se encuentra fuera del TIMESTAMP
compatible. rango ('1970-01-01 00:00:01'
a '2038-01-19 05:14:07'
UTC) cuando se convierte de from_tz
a UTC.
Ejemplo:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');
Resultado:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2040-05-10 01:00:00 | +-------------------------------------------------------+
Argumentos no válidos
Si alguno de los argumentos no es válido, CONVERT_TZ()
devuelve null
.
Ejemplo:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');
Resultado:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+
En este caso, intenté convertir la expresión de fecha y hora en una zona horaria no válida (+90:00
), y así null
fue devuelto.
Argumentos nulos
Si algún argumento es null
, el resultado es 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";
Resultado:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Argumento faltante
Llamando a CONVERT_TZ()
con el número incorrecto de argumentos, o sin pasar ningún argumento da como resultado un error:
SELECT CONVERT_TZ();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'