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'