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'