MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como CONVERT_TZ() funciona no MariaDB


No MariaDB, CONVERT_TZ() é uma função de data e hora integrada que converte um valor de data e hora de um fuso horário para outro.

Ao chamar a função, você passa três argumentos:a hora, o fuso horário para converter de , e o fuso horário para converter para .

Sintaxe


A sintaxe fica assim:
CONVERT_TZ(dt,from_tz,to_tz)

Onde dt é a expressão de data e hora, from_tz é o fuso horário para converter de e to_tz é o fuso horário para converter para .

Exemplo


Aqui está um exemplo:
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                                   |
+-------------------------------------------------------+

Aqui, o fuso horário original é +00:00 e o convertemos em +10:00.

Veja o que acontece se usarmos um fuso horário de início 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                                   |
+-------------------------------------------------------+

Fusos horários nomeados


Fusos horários nomeados podem ser usados, mas isso requer que as várias tabelas de fuso horário tenham sido carregadas.

Veja o que acontece quando as tabelas de fuso horário não são populosa:
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                                                        |
+-------------------------------------------------------------+

O resultado é null , porque não há dados de fuso horário nas tabelas de fuso horário.

Aqui está a mesma consulta novamente, mas desta vez com dados nas tabelas de fuso horário:
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 data e hora fora do intervalo


Nenhuma conversão ocorrerá se o valor estiver fora do TIMESTAMP suportado intervalo ('1970-01-01 00:00:01' para '2038-01-19 05:14:07' UTC) quando convertido de from_tz para UTC.

Exemplo:
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 inválidos


Se algum dos argumentos for inválido, CONVERT_TZ() retorna null .

Exemplo:
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                                                  |
+-------------------------------------------------------+

Nesse caso, tentei converter a expressão datetime em um fuso horário inválido (+90:00 ), e assim null foi devolvido.

Argumentos nulos


Se algum argumento for null , o resultado é 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 ausente


Chamando CONVERT_TZ() com o número errado de argumentos ou sem passar nenhum argumento resulta em um erro:
SELECT CONVERT_TZ();

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'