O LindormTable oferece quatro funções de tempo para formatar timestamps, converter entre timestamps UNIX e timestamps locais da sessão e calcular diferenças entre datas. Essas funções aplicam-se exclusivamente ao LindormTable. Todas as operações utilizam o fuso horário da sessão atual.
Pré-requisitos
Antes de começar, verifique se você atende aos seguintes requisitos:
LindormTable 2.7.8 ou posterior (para DATE_FORMAT, FROM_UNIXTIME e DATEDIFF)
Lindorm SQL 2.8.7.0 ou posterior (para DATE_FORMAT, FROM_UNIXTIME e DATEDIFF)
LindormTable 2.8.0 ou posterior e Lindorm SQL 2.9.0.0 ou posterior (para UNIX_TIMESTAMP)
Para visualizar ou atualizar a versão secundária do mecanismo do LindormTable, consulte Notas de versão do LindormTable e Atualizar a versão secundária do mecanismo de uma instância Lindorm. Para verificar a versão do Lindorm SQL, acesse Versões do SQL.
Funções suportadas
|
Função |
Descrição |
|
Formata um timestamp utilizando o fuso horário da sessão atual. |
|
|
Converte um valor numérico (BIGINT, INTEGER, SMALLINT ou TINYINT) em timestamp, respeitando o fuso horário da sessão atual. Funciona como o inverso de UNIX_TIMESTAMP. |
|
|
Calcula a diferença em dias entre dois timestamps, considerando apenas os valores de data. |
|
|
Converte um timestamp ou string de timestamp em timestamp UNIX. Retorna um valor DOUBLE em segundos. É a operação inversa de FROM_UNIXTIME. |
DATE_FORMAT
Formata um timestamp com base no fuso horário da sessão atual. Para visualizar ou definir o fuso horário da sessão, consulte Especificar um fuso horário para uma conexão do LindormTable.
Sintaxe
DATE_FORMAT(TIMESTAMP ts, STRING format)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Timestamp a ser formatado. |
|
|
Sim |
String de formatação composta por especificadores (por exemplo, |
Exemplo
Formate o timestamp 2024-01-01 17:20:35 como at 17:20:35 on Jan 1st, 2024:
SELECT DATE_FORMAT('2024-01-01 17:20:35', 'at %T on %b %D, %Y');
Saída:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 17:20:35 on JAN 1st, 2024 |
+------------------------------+
FROM_UNIXTIME
Converte um valor numérico em timestamp usando o fuso horário da sessão atual. Esta função é o inverso de UNIX_TIMESTAMP. Aceita valores BIGINT, INTEGER, SMALLINT e TINYINT. A entrada representa os segundos decorridos desde 1970-01-01 00:00:00 UTC, mantendo até três casas decimais.
Apenas o protocolo MySQL permite alterar o fuso horário de uma conexão. Consulte Usar o protocolo MySQL para desenvolver aplicações (recomendado) e Usar um cliente MySQL para conectar e utilizar o LindormTable .
Sintaxe
-- Convert a UNIX timestamp to a session-local timestamp.
FROM_UNIXTIME(Number seconds)
-- Convert and format the result.
-- Equivalent to: DATE_FORMAT(FROM_UNIXTIME(seconds), format)
FROM_UNIXTIME(Number seconds, STRING format)
A forma com dois parâmetros equivale a chamar DATE_FORMAT sobre o resultado da forma com um único parâmetro. O parâmetro format aceita os mesmos especificadores do DATE_FORMAT. Para mais detalhes, visualize Especificadores de formato.
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Timestamp UNIX em segundos. Mantém até três casas decimais. Representa o tempo decorrido desde |
|
|
Não |
String de formatação. Utiliza os mesmos especificadores do DATE_FORMAT. |
Exemplos
Exemplo 1: Converter um timestamp UNIX
Converta 10.1578 para timestamp usando o fuso horário da sessão atual:
SELECT FROM_UNIXTIME(10.1578);
Saída:
+-------------------------+
| EXPR$0 |
+-------------------------+
| 1970-01-01 08:00:10.158 |
+-------------------------+
Altere o fuso horário da sessão para +03:00 e converta novamente:
-- Change the session time zone.
SET @@time_zone='+03:00';
-- Convert using the new time zone.
SELECT FROM_UNIXTIME(10.1578);
Saída:
+-------------------------+
| EXPR$0 |
+-------------------------+
| 1970-01-01 03:00:10.158 |
+-------------------------+
Exemplo 2: Converter e formatar
Converta 10.1578 e formate o resultado conforme o fuso horário da sessão atual:
SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');
Saída:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 08:00:10 on JAN 1st, 1970 |
+------------------------------+
Defina o fuso horário da sessão como +03:00 e formate novamente:
-- Change the session time zone.
SET @@time_zone='+03:00';
-- Convert and format using the new time zone.
SELECT FROM_UNIXTIME(10.1578, 'at %T on %b %D, %Y');
Saída:
+------------------------------+
| EXPR$0 |
+------------------------------+
| at 03:00:10 on JAN 1st, 1970 |
+------------------------------+
DATEDIFF
Calcula a diferença em dias entre dois timestamps no fuso horário da sessão atual. O resultado corresponde a ts1 - ts2, comparando apenas as datas — horas, minutos e segundos são ignorados.
Resultado positivo:
ts1representa uma data posterior ats2.Resultado negativo:
ts1indica uma data anterior ats2.Zero:
ts1ets2ocorrem na mesma data.
Sintaxe
DATEDIFF(TIMESTAMP ts1, TIMESTAMP ts2)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Primeiro timestamp. |
|
|
Sim |
Segundo timestamp. |
Exemplos
Exemplo 1: ts1 é anterior a ts2
SELECT DATEDIFF('2024-01-01 15:30:00', '2024-01-02 00:59:59');
Saída:
+--------+
| EXPR$0 |
+--------+
| -1 |
+--------+
Exemplo 2: ts1 é posterior a ts2
SELECT DATEDIFF('2024-01-05 15:30:00', '2024-01-02 00:59:59');
Saída:
+--------+
| EXPR$0 |
+--------+
| 3 |
+--------+
Exemplo 3: ts1 e ts2 na mesma data
Embora os horários sejam diferentes, a data é idêntica, resultando em 0:
SELECT DATEDIFF('2024-01-02 15:30:00', '2024-01-02 00:59:59');
Saída:
+--------+
| EXPR$0 |
+--------+
| 0 |
+--------+
UNIX_TIMESTAMP
Converte um timestamp ou string de timestamp em timestamp UNIX, retornando um valor DOUBLE. Trata-se da operação inversa de FROM_UNIXTIME.
O uso de UNIX_TIMESTAMP exige LindormTable 2.8.0 ou posterior e Lindorm SQL 2.9.0.0 ou posterior. Se necessário, atualize a versão secundária do mecanismo do LindormTable no console do Lindorm.
A precisão do valor retornado varia conforme o tipo de entrada:
Entrada TIMESTAMP: mantém 3 casas decimais.
Entrada VARCHAR: a string representa o timestamp no fuso horário da sessão atual, preservando até 6 casas decimais.
É possível utilizar UNIX_TIMESTAMP nos seguintes contextos:
Projeção (lista de colunas) de uma instrução SELECT
Cláusula WHERE de uma instrução SELECT
Cláusula VALUES de uma instrução UPSERT
Sintaxe
UNIX_TIMESTAMP(ts)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Timestamp a ser convertido. Deve ser do tipo TIMESTAMP ou VARCHAR. |
Exemplos
Crie uma tabela e insira dados de amostra:
-- Create a table with TIMESTAMP and VARCHAR timestamp columns.
CREATE TABLE t1(p1 INT, c1 TIMESTAMP, c2 VARCHAR, c3 DOUBLE, PRIMARY KEY(p1));
-- Insert sample rows.
UPSERT INTO t1(p1, c1, c2, c3) VALUES
(1, '2025-01-01 08:30:00', '2025-01-01 08:30:00', '12.24'),
(2, '1970-01-01 08:00:00.123', '1970-01-01 08:00:00.123', '10.32'),
(3, '1970-01-01 08:00:10.13579', '1970-01-01 08:00:10.13579', '10.12'),
(4, '1970-01-01 08:00:10.123456789','1970-01-01 08:00:10.123456789','17.33');
Exemplo 1: Consultar timestamps UNIX de uma tabela
Valores TIMESTAMP (c1) mantêm 3 casas decimais; valores VARCHAR (c2) preservam até 6.
SELECT p1, UNIX_TIMESTAMP(c1), UNIX_TIMESTAMP(c2) FROM t1;
Saída:
+----+------------+------------+
| p1 | EXPR$1 | EXPR$2 |
+----+------------+------------+
| 1 | 1735691400 | 1735691400 |
| 2 | 0.123 | 0.123 |
| 3 | 10.135 | 10.13579 |
| 4 | 10.123 | 10.123457 |
+----+------------+------------+
Exemplo 2: Filtrar linhas usando UNIX_TIMESTAMP na cláusula WHERE
Conte as linhas onde o timestamp UNIX de c1 seja maior que 10:
SELECT COUNT(*) FROM t1 WHERE UNIX_TIMESTAMP(c1) > 10;
Saída:
+--------+
| EXPR$0 |
+--------+
| 3 |
+--------+
Exemplo 3: Gravar resultado de UNIX_TIMESTAMP em uma coluna DOUBLE
Utilize UNIX_TIMESTAMP na cláusula VALUES para escrever o resultado diretamente na coluna DOUBLE c3:
UPSERT INTO t1(p1, c3) VALUES(1, UNIX_TIMESTAMP('1970-01-01 08:00:00.123'));
Para verificar o resultado, execute:
SELECT * FROM t1;
Especificadores de formato
As funções DATE_FORMAT e FROM_UNIXTIME aceitam os seguintes especificadores de formato.
Caracteres na string de formatação que não começam com % são retornados exatamente como foram inseridos.
|
Especificador |
Saída |
Descrição |
|
|
Sun a Sat |
Nome abreviado do dia da semana. |
|
|
Jan a Dec |
Nome abreviado do mês. |
|
|
0 a 12 |
Mês como valor numérico. |
|
|
1st, 2nd, 3rd... |
Dia do mês com sufixo ordinal. |
|
|
00 a 31 |
Dia do mês com dois dígitos. |
|
|
00 a 31 |
Dia do mês com dois dígitos. |
|
|
000000 a 999999 |
Microssegundos. |
|
|
00 a 23 |
Hora no formato 24h, com dois dígitos. |
|
|
01 a 12 |
Hora no formato 12h, com dois dígitos. |
|
|
01 a 12 |
Hora no formato 12h, com dois dígitos. |
|
|
00 a 59 |
Minutos com dois dígitos. |
|
|
001 a 366 |
Dia do ano com três dígitos. |
|
|
0 a 23 |
Hora no formato 24h, valor numérico. |
|
|
1 a 12 |
Hora no formato 12h, valor numérico. |
|
|
January a December |
Nome completo do mês. |
|
|
01 a 12 |
Mês com dois dígitos. |
|
|
AM ou PM |
Indicador AM/PM. |
|
|
hh:mm:ss AM/PM |
Horário no formato 12h. |
|
|
00 a 59 |
Segundos com dois dígitos. |
|
|
00 a 59 |
Segundos com dois dígitos. |
|
|
hh:mm:ss |
Horário no formato 24h. |
|
|
Sunday a Saturday |
Nome completo do dia da semana. |
|
|
0 a 6 |
Dia da semana como número. |
|
|
Ano com quatro dígitos |
Exemplo: |
|
|
Ano com dois dígitos |
Baseado nos dois últimos dígitos do ano. Exemplo: |
|
|
% |
Sinal de porcentagem literal. |
|
|
x |
Qualquer letra que não seja um especificador reservado, retornada sem alteração. Exemplo: |