sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona CONVERT_TZ() en MariaDB

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'