O tipo de dado Time64 representa uma hora do dia com segundos fracionários.
Ele não possui componentes de data do calendário (dia, mês, ano).
O parâmetro precision define o número de dígitos fracionários e, portanto, o tamanho do tick.
Tamanho do tick (precisão): 10-precision segundos. Intervalo válido: 0..9. As opções mais comuns são 3 (milissegundos), 6 (microssegundos) e 9 (nanossegundos).
Sintaxe:
Internamente, Time64 armazena um número decimal com sinal de 64 bits (Decimal64) de segundos fracionários.
A resolução do tick é determinada pelo parâmetro precision.
Não há suporte a fusos horários: especificar um fuso horário com Time64 gerará um erro.
Ao contrário de DateTime64, Time64 não armazena um componente de data.
Veja também Time.
Intervalo de representação textual: [-999:59:59.000, 999:59:59.999] para precision = 3. Em geral, o mínimo é -999:59:59 e o máximo é 999:59:59, com até precision dígitos fracionários (para precision = 9, o mínimo é -999:59:59.999999999).
Detalhes de implementação
Representação.
Valor Decimal64 com sinal que representa frações de segundo com precision dígitos fracionários.
Normalização.
Ao converter strings para Time64, os componentes de tempo são normalizados e não validados.
Por exemplo, 25:70:70 é interpretado como 26:11:10.
Valores negativos.
Sinais de menos no início são aceitos e preservados.
Valores negativos normalmente surgem de operações aritméticas sobre valores Time64.
Para Time64, entradas negativas são preservadas tanto em entradas textuais (por exemplo, '-01:02:03.123') quanto em entradas numéricas (por exemplo, -3723.123).
Saturação.
O componente de hora do dia é limitado ao intervalo [-999:59:59.xxx, 999:59:59.xxx] ao converter em componentes ou serializar para texto.
O valor numérico armazenado pode exceder esse intervalo; no entanto, qualquer extração de componentes (horas, minutos, segundos) e representação textual usam o valor saturado.
Fusos horários.
Time64 não oferece suporte a fusos horários.
Especificar um fuso horário ao criar um tipo ou valor Time64 gera um erro.
Da mesma forma, tentativas de aplicar ou alterar o fuso horário em colunas Time64 não são compatíveis e resultam em erro.
- Criar uma tabela com uma coluna do tipo
Time64 e inserir dados nela:
CREATE TABLE tab64
(
`event_id` UInt8,
`time` Time64(3)
)
ENGINE = TinyLog;
-- Analisar Time64
-- - a partir de string,
-- - a partir de um número de segundos desde 00:00:00 (parte fracionária de acordo com a precisão).
INSERT INTO tab64 VALUES (1, '14:30:25'), (2, 52225.123), (3, '14:30:25');
SELECT * FROM tab64 ORDER BY event_id;
┌─event_id─┬────────time─┐
1. │ 1 │ 14:30:25.000 │
2. │ 2 │ 14:30:25.123 │
3. │ 3 │ 14:30:25.000 │
└──────────┴──────────────┘
- Filtragem de valores
Time64
SELECT * FROM tab64 WHERE time = toTime64('14:30:25', 3);
┌─event_id─┬────────time─┐
1. │ 1 │ 14:30:25.000 │
2. │ 3 │ 14:30:25.000 │
└──────────┴──────────────┘
SELECT * FROM tab64 WHERE time = toTime64(52225.123, 3);
┌─event_id─┬────────time─┐
1. │ 2 │ 14:30:25.123 │
└──────────┴──────────────┘
Observação: toTime64 interpreta literais numéricos como segundos com parte fracionária, de acordo com a precisão especificada; portanto, informe explicitamente os dígitos fracionários desejados.
- Inspecionando o tipo resultante:
SELECT CAST('14:30:25.250' AS Time64(3)) AS column, toTypeName(column) AS type;
┌────────column─┬─type──────┐
1. │ 14:30:25.250 │ Time64(3) │
└───────────────┴───────────┘
Um valor Time64 pode ser adicionado a um valor Date ou Date32 para produzir um DateTime64 com a mesma escala do Time64:
SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime64('14:30:25.123456', 6) AS dt, toTypeName(dt);
┌─────────────────────────dt─┬─toTypeName(dt)─┐
1. │ 2024-07-15 14:30:25.123456 │ DateTime64(6) │
└────────────────────────────┴────────────────┘
Consulte Adição de data e hora para ver detalhes sobre todas as combinações compatíveis e os tipos de resultado.
Veja também
Última modificação em 10 de junho de 2026