Todos os produtos
Search
Central de documentação

Hologres:Funções de data e hora

Última atualização: Jun 28, 2026

O Hologres oferece suporte às seguintes funções de data e hora para conversão de tipos, operações aritméticas, extração e truncamento de campos, além da obtenção da data ou hora atual.

Visão geral das funções

Funções de conversão de tipo

Função

Descrição

Exemplo

Resultado

MAKE_DATE

Cria uma data a partir de valores de ano, mês e dia. Intervalo de tempo padrão: 1925–2282.

MAKE_DATE(2013, 7, 15)

2013-07-15

TO_CHAR

Converte um timestamp, inteiro ou número em uma string.

TO_CHAR(current_timestamp, 'YYYY-MM-DD')

2024-08-05

TO_DATE

Converte uma string em uma data. Intervalo de tempo padrão: 1925–2282.

TO_DATE('05 Dec 2000', 'DD Mon YYYY')

2000-12-05

TO_TIMESTAMP

Converte uma string ou um tempo de época Unix em um timestamp. Intervalo de tempo padrão: 1925–2282.

TO_TIMESTAMP(163280296)

1975-03-06 03:38:16+08

Funções aritméticas de data/hora

Função

Descrição

Exemplo

Resultado

ADD_MONTHS

Adiciona meses a uma data. Compatível com Oracle; requer a extensão orafce.

ADD_MONTHS(current_date, 2)

2024-10-05

DATEADD

Adiciona ou subtrai um intervalo de tempo de uma data. Intervalo de tempo padrão: 1925–2282. Disponível nas versões V2.0.31–V2.1.0 e V2.1.13+.

DATEADD(a, 1, 'mm')

2005-03-28 00:00:00

DATEDIFF

Retorna a diferença entre duas datas ou timestamps em uma unidade especificada. Intervalo de tempo padrão: 1925–2282. Disponível nas versões V2.0.31–V2.1.0 e V2.1.13+.

DATEDIFF(a, '2005-03-02', 'mi')

-2880

MONTHS_BETWEEN

Retorna o número de meses entre duas datas. Compatível com Oracle; requer a extensão orafce.

MONTHS_BETWEEN('2022-01-01', '2021-11-01')

2

NEXT_DAY

Retorna a data do primeiro dia da semana especificado após uma determinada data. Compatível com Oracle; requer a extensão orafce.

NEXT_DAY('2022-05-01', 'FRIDAY')

2022-05-06

+

Soma valores de data e hora.

date '2001-09-28' + integer '7'

2001-10-05

-

Subtrai valores de data e hora.

date '2001-10-01' - date '2001-09-28'

3

*

Multiplica um intervalo por um número.

21 * interval '3 day'

0 years 0 mons 63 days 0 hours 0 mins 0.0 secs

/

Divide um intervalo por um número.

interval '1 hour' / 1.5

0 years 0 mons 0 days 0 hours 40 mins 0.0 secs

Extração e truncamento de campos de data/hora

Função

Descrição

Exemplo

Resultado

DATE_PART

Extrai um subcampo de um timestamp. Equivalente a EXTRACT.

DATE_PART('hour', timestamp '2001-02-16 16:38:40')

16

DATE_TRUNC

Trunca um timestamp para uma precisão especificada.

DATE_TRUNC('day', timestamptz '2001-02-16 20:38:40+08')

2001-02-16 00:00:00+08

EXTRACT

Extrai um subcampo de um timestamp. Equivalente a DATE_PART.

EXTRACT(hour FROM timestamp '2001-02-16 20:38:40')

20

LAST_DAY

Retorna o último dia do mês. Intervalo de tempo padrão: 1925–2282. Disponível nas versões V2.0.31–V2.1.0 e V2.1.13+.

LAST_DAY('2004-02-28')

2004-02-29

ORACLE_LAST_DAY

Retorna o último dia do mês. Compatível com Oracle; requer a extensão orafce.

ORACLE_LAST_DAY('2022-05-01')

2022-05-31

ROUND

Arredonda uma data para a unidade de tempo mais próxima. Compatível com Oracle; requer a extensão orafce.

ROUND('2022-07-22'::date, 'Y')

2023-01-01

TRUNC

Trunca uma data ou timestamp para uma precisão especificada. Compatível com Oracle; requer a extensão orafce.

TRUNC('2022-05-22'::date, 'Y')

2022-01-01

Funções de data/hora atual

Função

Descrição

Tipo de retorno

CLOCK_TIMESTAMP()

Retorna a hora atual real. Muda a cada chamada, mesmo dentro de uma única instrução.

TIMESTAMPTZ

CURRENT_DATE

Retorna a data atual no início da transação.

DATE

CURRENT_TIMESTAMP

Retorna o timestamp no início da transação. Equivalente a TRANSACTION_TIMESTAMP() e NOW().

TIMESTAMPTZ

LOCALTIMESTAMP

Retorna o timestamp no início da transação, sem fuso horário.

TIMESTAMP

NOW()

Retorna o timestamp no início da transação. Equivalente a CURRENT_TIMESTAMP e TRANSACTION_TIMESTAMP().

TIMESTAMPTZ

STATEMENT_TIMESTAMP()

Retorna o timestamp no início da instrução atual.

TIMESTAMPTZ

TIMEOFDAY()

Retorna a hora atual real como uma string de texto formatada.

TEXT

TRANSACTION_TIMESTAMP()

Retorna o timestamp no início da transação. Equivalente a CURRENT_TIMESTAMP e NOW().

TIMESTAMPTZ

Outras funções

Função

Descrição

Exemplo

Resultado

ISFINITE

Testa se uma data ou timestamp é finito (não é infinity ou -infinity).

ISFINITE(date '2001-02-16')

t

Partes e unidades de data suportadas

A tabela a seguir mostra os valores de partes de data aceitos por DATEADD, DATEDIFF, DATE_PART, DATE_TRUNC e EXTRACT. Nem todas as partes se aplicam a todas as funções.

Parte da data

Abreviações

DATEADD

DATEDIFF

DATE_PART / EXTRACT

DATE_TRUNC

year

yyyy, yy

quarter

month

mm, mon

week

day

dd

hour

hh

minute

mi

second

ss

century

decade

dow

✓ (0=Domingo)

isodow

✓ (7=Domingo)

doy

epoch

Suporte a intervalo de tempo estendido (parâmetro GUC)

Por padrão, TO_CHAR, TO_DATE e TO_TIMESTAMP aceitam datas no intervalo de 1925 a 2282. Para oferecer suporte a todos os intervalos de tempo, execute uma das instruções a seguir antes da consulta SQL.

Disponível no Hologres V1.1.31 e versões posteriores:

SET hg_experimental_functions_use_pg_implementation = 'to_char';
SET hg_experimental_functions_use_pg_implementation = 'to_date';
SET hg_experimental_functions_use_pg_implementation = 'to_timestamp';
-- Or enable all three at once:
SET hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';
Definir este parâmetro GUC reduz o desempenho da consulta em aproximadamente 50%. No Hologres V1.1.42 e versões posteriores, o impacto no desempenho cai para cerca de 20%.

Funções de conversão de tipo

TO_CHAR

Converte um timestamp, inteiro ou número em uma string.

Sintaxe

TO_CHAR(TIMESTAMP | TIMESTAMPTZ, TEXT)
TO_CHAR(INT, TEXT)
TO_CHAR(DOUBLE PRECISION, TEXT)

Tipo de retorno: TEXT

Notas de uso

  • Oferece suporte aos formatos de 24 horas (HH24) e 12 horas (HH12). O padrão é 12 horas.

  • Especificadores de formato comuns: YYYY (ano), MM (mês), DD (dia), HH (hora), MI (minuto), SS (segundo).

  • Para timestamps com fuso horário (TIMESTAMPTZ): se nenhum fuso horário for especificado, o valor será convertido para o fuso horário do sistema (UTC+8 por padrão) antes da formatação. Use AT TIME ZONE para converter para um fuso horário diferente.

  • Para estender o intervalo de tempo suportado além de 1925–2282, consulte Suporte a intervalo de tempo estendido.

Exemplos

Converta um timestamp para o formato de 24 horas:

-- Returns: 13:48:30
SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS');

-- Returns: 2024-08-05
SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');

Converta um timestamp para o formato de 12 horas:

-- Returns: 01:50:42 PM
SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM');

-- Returns: 12:30:00 AM
SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');

Converta uma coluna TIMESTAMPTZ — o valor é convertido para o fuso horário do sistema (UTC+8) por padrão:

CREATE TABLE time_test(a TEXT, b TIMESTAMPTZ);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00', '2004-10-19 10:23:54+08');

-- Returns: 10:23:54
SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test;

Converta uma coluna TIMESTAMPTZ para um fuso horário específico usando AT TIME ZONE:

CREATE TABLE timestamptz_test(a TIMESTAMPTZ);
INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');

-- Without a time zone override: converted to system time zone (UTC+8). Returns: 2023-03-21 16:23:54
SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;

-- With the US/Eastern time zone. Returns: 2023-03-21 04:23:54
SELECT TO_CHAR(a AT TIME ZONE 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;

Converta um inteiro em uma string:

-- Returns: 125
SELECT TO_CHAR(125, '999');

Converta um número de precisão dupla em uma string:

-- Returns: 125.8
SELECT TO_CHAR(125.8::real, '999D9');

TO_DATE

Converte uma string em uma data. Intervalo de tempo padrão: 1925–2282.

Sintaxe

TO_DATE(<text_date> TEXT, <format_mask> TEXT)

Parâmetros

Parâmetro

Obrigatório

Descrição

text_date

Sim

A string a ser convertida.

format_mask

Sim

O formato de data da string de entrada.

Tipo de retorno: DATE

Notas de uso

Para estender o intervalo de tempo suportado além de 1925–2282, consulte Suporte a intervalo de tempo estendido.

Exemplos

Converta uma string em uma data:

-- Returns: 2000-12-05
SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY');

-- Returns: 2001-03-24
SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');

Converta uma coluna TEXT em uma data:

CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;

Resultado:

  to_date
------------
 2001-09-28

TO_TIMESTAMP

Converte uma string ou um tempo de época Unix em um valor TIMESTAMPTZ. Intervalo de tempo padrão: 1925–2282.

Sintaxe

-- Convert a string to a timestamp
TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)

-- Convert a Unix epoch time (seconds since 1970-01-01 00:00:00 UTC) to a timestamp
TO_TIMESTAMP(DOUBLE PRECISION)

Tipo de retorno: TIMESTAMPTZ

Notas de uso

Exemplos

Converta uma string em um timestamp:

SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');

Resultado:

      to_timestamp
------------------------
 2000-12-05 00:00:00+08

Converta uma coluna TEXT em um timestamp:

CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;

Resultado:

      to_timestamp
------------------------
 2001-09-28 00:00:00+08

Converta um tempo de época Unix em segundos:

-- Returns: 1975-03-06 03:38:16+08
SELECT TO_TIMESTAMP(163280296);

Converta um tempo de época Unix em milissegundos (divida por 1000 primeiro):

-- Returns: 2021-09-28 12:22:41+08
SELECT TO_TIMESTAMP(1632802961000 / 1000);

MAKE_DATE

Cria uma data a partir de valores inteiros de ano, mês e dia. Intervalo de tempo padrão: 1925–2282.

Sintaxe

MAKE_DATE(<year> INT, <month> INT, <day> INT)

Tipo de retorno: DATE

Notas de uso

Disponível no Hologres V2.0.29 e versões posteriores. Em operações de escrita, os argumentos não podem ser todos constantes.

Exemplo

-- Returns: 2013-07-15
SELECT MAKE_DATE(2013, 7, 15);

Resultado:

 make_date
------------
 2013-07-15

Funções aritméticas de data/hora

DATEADD

Adiciona ou subtrai um intervalo de tempo de uma data. Intervalo de tempo padrão: 1925–2282.

Sintaxe

DATEADD(<d> DATE | TIMESTAMP | TIMESTAMPTZ, <num> BIGINT, <str> TEXT)

Parâmetros

Parâmetro

Descrição

d

O valor base de data ou hora.

num

O número de unidades a adicionar (positivo) ou subtrair (negativo).

str

A unidade de tempo. Consulte Partes e unidades de data suportadas para obter valores válidos.

Tipo de retorno: Igual ao tipo de entrada (DATE, TIMESTAMP ou TIMESTAMPTZ).

Notas de uso

  • Disponível no Hologres V2.0.31–V2.1.0 e V2.1.13 e versões posteriores.

  • Em operações de escrita, os argumentos não podem ser todos constantes.

Exemplo

Adicione um mês a uma coluna de timestamp:

CREATE TABLE test_dateadd (a TIMESTAMP);
INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00');

SELECT DATEADD(a, 1, 'mm') FROM test_dateadd;

Resultado:

       dateadd
---------------------
 2005-03-28 00:00:00

ADD_MONTHS

Adiciona um número especificado de meses a uma data. Esta é uma função compatível com Oracle que requer a extensão orafce. Para obter mais informações, consulte Funções Oracle suportadas.

Sintaxe

ADD_MONTHS(<d> DATE, <month> INT)

Parâmetros

Parâmetro

Descrição

d

A data base.

month

O número de meses a adicionar.

Tipo de retorno: DATE

Exemplo

SELECT ADD_MONTHS(current_date, 2);

Resultado:

 add_months
------------
 2024-10-05

DATEDIFF

Retorna a diferença entre duas datas ou timestamps em uma unidade especificada. Intervalo de tempo padrão: 1925–2282.

Sintaxe

DATEDIFF(<d1> DATE | TIMESTAMP | TIMESTAMPTZ, <d2> DATE | TIMESTAMP | TIMESTAMPTZ, <str> TEXT)

Parâmetros

Parâmetro

Descrição

d1

A primeira data ou timestamp.

d2

A segunda data ou timestamp.

str

A unidade de tempo para calcular a diferença. Consulte Partes e unidades de data suportadas para obter valores válidos.

Tipo de retorno: BIGINT

Notas de uso

  • Disponível no Hologres V2.0.31–V2.1.0 e V2.1.13 e versões posteriores.

  • Em operações de escrita, os argumentos não podem ser todos constantes.

  • A função utiliza truncamento de unidade completa, não arredondamento. Se a diferença for menor que uma unidade completa, ela retorna 0. Por exemplo, a diferença de anos entre 2023-12-31 e 2024-01-01 é 0.

  • Para contar cruzamentos de limites (retornando 1 no exemplo anterior), execute a seguinte instrução antes da consulta:

    SET hg_experimental_datediff_use_presto_impl = off;

Exemplo

Calcule a diferença em minutos entre dois timestamps:

CREATE TABLE test_datediff (a TIMESTAMP);
INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00');

SELECT DATEDIFF(a, '2005-03-02 00:00:00', 'mi') FROM test_datediff;

Resultado:

 datediff
----------
    -2880

MONTHS_BETWEEN

Retorna o número de meses entre duas datas. Esta é uma função compatível com Oracle que requer a extensão orafce. Para obter mais informações, consulte Funções Oracle suportadas.

Sintaxe

MONTHS_BETWEEN(DATE, DATE)

Tipo de retorno: INT

Exemplos

-- Returns: 2
SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');

-- Returns: -2
SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');

NEXT_DAY

Retorna a data do primeiro dia da semana especificado que segue uma determinada data. Esta é uma função compatível com Oracle que requer a extensão orafce. Para obter mais informações, consulte Funções Oracle suportadas.

Sintaxe

NEXT_DAY(<d> DATE, <str> TEXT | INT)

Parâmetros

Parâmetro

Descrição

d

A data inicial.

str

O dia da semana alvo, como uma string (como Friday) ou um inteiro de 1 a 7, onde 1 = Domingo e 2 = Segunda-feira.

Tipo de retorno: DATE

Exemplos

-- Returns: 2022-05-06
SELECT NEXT_DAY('2022-05-01', 'FRIDAY');

-- Returns: 2022-05-06
SELECT NEXT_DAY('2022-05-01', 5);

Operadores aritméticos

Os operadores a seguir funcionam com valores de data e hora.

OperadorOperando esquerdoOperando direitoDescriçãoExemploResultado
+DATEINTEGERAdiciona dias a uma data.date '2001-09-28' + integer '7'2001-10-05
+DATETIMECombina uma data e uma hora para produzir um timestamp.date '2001-09-28' + time '03:00'2001-09-28 03:00:00
+DATEINTERVALAdiciona um intervalo a uma data.date '2001-09-28' + interval '1 hour'2001-09-28 01:00:00
+TIMESTAMPTZINTERVALAdiciona um intervalo a um timestamp.now() + interval '1 day'2022-12-08 20:09:19+08
-DATEDATERetorna o número de dias entre duas datas como um inteiro.date '2001-10-01' - date '2001-09-28'3
-DATEINTEGERSubtrai dias de uma data.date '2001-10-01' - integer '7'2001-09-24
-DATETIMESubtrai uma hora de uma data, produzindo um timestamp.date '2001-09-28' - time '03:00'2001-09-27 21:00:00
-DATEINTERVALSubtrai um intervalo de uma data.date '2001-09-28' - interval '1 hour'2001-09-27 23:00:00
-TIMESTAMPTZINTERVALSubtrai um intervalo de um timestamp.now() - interval '2 day'2022-12-06 20:27:21+08
*INTEGERINTERVALMultiplica um intervalo.21 * interval '3 day'0 years 0 mons 63 days 0 hours 0 mins 0.0 secs
/INTERVALDOUBLE PRECISIONDivide um intervalo.interval '1 hour' / double precision '1.5'0 years 0 mons 0 days 0 hours 40 mins 0.0 secs

Extração e truncamento de campos de data/hora

EXTRACT

Extrai um subcampo (como ano, mês ou dia) de uma expressão de timestamp. EXTRACT equivale a DATE_PART.

Sintaxe

EXTRACT(field FROM TIMESTAMP)

Tipo de retorno: DOUBLE PRECISION

Notas de uso

Valores válidos para field: century, day, decade, dow (dia da semana, 0=Domingo), isodow (dia da semana, 7=Domingo), doy (dia do ano), epoch, hour, minute, month, quarter, second, week, year.

Exemplos

Extraia a hora de um timestamp:

-- Returns: 20
SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');

Extraia o minuto da hora atual:

-- Returns: 12
SELECT EXTRACT(minute FROM NOW());

Obtenha o tempo de época Unix (segundos desde 1970-01-01 00:00:00 UTC):

CREATE TABLE time_test(a TEXT);
INSERT INTO time_test VALUES ('2001-09-28 03:00:00');
SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;

Resultado:

  date_part
------------
 1001606400

Funções de extração otimizadas para desempenho

A partir do Hologres V4.0, há suporte às seguintes funções para melhor compatibilidade com ClickHouse e Doris. Elas têm a mesma semântica de EXTRACT(<field> FROM timestamp), mas oferecem melhor desempenho. Essas funções não aceitam argumentos compostos apenas por constantes.

Função

Aliases

Equivalente a

extract_century(timestamp)

extract(century from timestamp)

extract_day(timestamp)

toDayOfMonth, day

extract(day from timestamp)

extract_decade(timestamp)

extract(decade from timestamp)

extract_dow(timestamp)

extract(dow from timestamp)

extract_doy(timestamp)

toDayOfYear, dayofyear

extract(doy from timestamp)

extract_hour(timestamp)

toHour, hour

extract(hour from timestamp)

extract_isodow(timestamp)

dayofweek_iso

extract(isodow from timestamp)

extract_isoweek(timestamp)

toIsoWeek, week_iso

extract(week from timestamp)

extract_minute(timestamp)

toMinute, minute

extract(minute from timestamp)

extract_month(timestamp)

toMonth, month

extract(month from timestamp)

extract_quarter(timestamp)

toQuarter, quarter

extract(quarter from timestamp)

extract_second(timestamp)

toSecond, second

extract(second from timestamp)

extract_year(timestamp)

toYear, year

extract(year from timestamp)

DATE_PART

Extrai um subcampo de um timestamp. DATE_PART equivale a EXTRACT.

Sintaxe

DATE_PART(<str> TEXT, <d> TIMESTAMP)

Parâmetros

Parâmetro

Descrição

str

O subcampo a extrair. Valores válidos: century, day, decade, dow, isodow, doy, epoch, hour, minute, month, quarter, second, week, year.

d

A expressão de data/hora.

Tipo de retorno: DOUBLE PRECISION

Exemplos

Obtenha a hora de um timestamp:

SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');

Resultado:

 date_part
-----------
        16

Obtenha o número da semana ISO para uma data:

SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

Resultado:

 date_part
-----------
        41

Obtenha o número do mês para uma data:

SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));

Resultado:

 date_part
-----------
        10

DATE_TRUNC

Trunca um valor de data ou hora para uma precisão especificada.

Sintaxe

DATE_TRUNC(<str> TEXT, <d> TIME | TIMESTAMP | TIMESTAMPTZ)

Parâmetros

Parâmetro

Descrição

str

A precisão para truncamento. Valores válidos: century, decade, year, quarter, month, week, day, hour, minute, second.

d

O valor de data ou hora a truncar.

Tipo de retorno: TIMESTAMP ou TIMESTAMPTZ (corresponde ao tipo de entrada).

Exemplos

Trunque uma hora para a hora cheia:

SELECT DATE_TRUNC('hour', time '12:38:40');

Resultado:

 date_trunc
------------
 12:00:00

Trunque um timestamp para o dia:

SELECT DATE_TRUNC('day', timestamptz '2001-02-16 20:38:40+08');

Resultado:

       date_trunc
------------------------
 2001-02-16 00:00:00+08

Trunque um timestamp para o mês:

SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');

Resultado:

     date_trunc
---------------------
 2001-02-01 00:00:00

Obtenha o primeiro dia do mês atual às 12:00:

SELECT DATE_TRUNC('month', now()) + interval '12h';

Resultado:

       ?column?
---------------------
 2024-08-01 12:00:00+08

Obtenha 09:00 do dia atual:

SELECT DATE_TRUNC('day', now()) + interval '9h';

Resultado:

       ?column?
------------------------
 2024-08-08 09:00:00+08

Obtenha o início do mesmo dia da semana na semana seguinte:

SELECT DATE_TRUNC('day', now()) + interval '7d';

Resultado:

       ?column?
------------------------
 2024-08-15 00:00:00+08

LAST_DAY

Retorna o último dia do mês para uma data especificada. Intervalo de tempo padrão: 1925–2282.

Sintaxe

LAST_DAY(DATE | TIMESTAMP | TIMESTAMPTZ)

Tipo de retorno: DATE

Notas de uso

  • Disponível no Hologres V2.0.31–V2.1.0 e V2.1.13 e versões posteriores.

  • Em operações de escrita, os argumentos não podem ser todos constantes.

Exemplo

CREATE TABLE test_last_day (a TIMESTAMP);
INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00');

SELECT LAST_DAY(a) FROM test_last_day;

Resultado:

  last_day
------------
 2004-02-29

ORACLE_LAST_DAY

Retorna o último dia do mês para uma data especificada. Esta é uma função compatível com Oracle que requer a extensão orafce. Intervalo de tempo padrão: 1925–2282. Para obter mais informações, consulte Funções Oracle suportadas.

Sintaxe

ORACLE_LAST_DAY(DATE)

Tipo de retorno: DATE

Exemplo

SELECT ORACLE_LAST_DAY('2022-05-01');

Resultado:

 oracle_last_day
-----------------
 2022-05-31

TRUNC

Trunca uma data ou timestamp para uma precisão especificada. Esta é uma função compatível com Oracle que requer a extensão orafce. Para obter mais informações, consulte Funções Oracle suportadas.

Sintaxe

TRUNC(<d> DATE | TIMESTAMP [, <str> TEXT])

Parâmetros

Parâmetro

Obrigatório

Descrição

d

Sim

O valor de data ou hora a truncar. Se um valor TIMESTAMPTZ for passado, a parte da hora será definida como 00:00:00.

str

Não

A precisão para truncamento. O padrão é dia se omitido. Y retorna o primeiro dia do ano; Q retorna o primeiro dia do trimestre. Para todos os valores suportados, consulte a documentação da Oracle.

Tipo de retorno: DATE ou TIMESTAMP

Exemplos

Trunque uma data para o início do ano:

SELECT TRUNC('2022-05-22'::date, 'Y');

Resultado:

   trunc
------------
 2022-01-01

Trunque um timestamp para o início do ano:

SELECT TRUNC('2022-05-22 13:11:22'::timestamp, 'Y');

Resultado:

        trunc
---------------------
 2022-01-01 00:00:00

Trunque um timestamp para o início do trimestre:

SELECT TRUNC('2022-05-22 13:11:22'::timestamp, 'Q');

Resultado:

        trunc
---------------------
 2022-04-01 00:00:00

Trunque um timestamp para o início do dia (padrão):

SELECT TRUNC('2022-05-22 13:11:22'::timestamp);

Resultado:

        trunc
---------------------
 2022-05-22 00:00:00

ROUND

Arredonda uma data ou timestamp para a unidade de tempo mais próxima. Esta é uma função compatível com Oracle que requer a extensão orafce. Para obter mais informações, consulte Funções Oracle suportadas.

Sintaxe

ROUND(<d> DATE | TIMESTAMPTZ [, <str> TEXT])

Parâmetros

Parâmetro

Obrigatório

Descrição

d

Sim

O valor de data ou hora a arredondar.

str

Não

A unidade de tempo para arredondamento. O padrão é dia se omitido. Y arredonda para o primeiro dia do ano mais próximo. Para todos os valores suportados, consulte a documentação da Oracle.

Tipo de retorno: DATE ou TIMESTAMP

Exemplos

Arredonde uma data para o ano mais próximo (antes de 1º de julho — arredonda para baixo):

SELECT ROUND('2022-05-22'::date, 'Y');

Resultado:

   round
------------
 2022-01-01

Arredonde uma data para o ano mais próximo (após 1º de julho — arredonda para cima):

SELECT ROUND('2022-07-22'::date, 'Y');

Resultado:

   round
------------
 2023-01-01

Arredonde um timestamp para o ano mais próximo:

SELECT ROUND('2022-07-22 13:11:22'::timestamp, 'Y');

Resultado:

        round
---------------------
 2023-01-01 00:00:00

Arredonde um timestamp para o dia mais próximo (padrão):

SELECT ROUND('2022-02-22 13:11:22'::timestamp);

Resultado:

        round
---------------------
 2022-02-23 00:00:00

Funções de data/hora atual

CURRENT_DATE

Retorna a data atual no início da transação.

Sintaxe

CURRENT_DATE

Tipo de retorno: DATE

Exemplo

SELECT CURRENT_DATE;

Resultado:

 current_date
--------------
 2024-08-08

CURRENT_TIMESTAMP

Retorna o timestamp no início da transação atual. Equivalente a TRANSACTION_TIMESTAMP() e NOW().

Sintaxe

CURRENT_TIMESTAMP
O valor retornado não muda dentro de uma única transação.

Tipo de retorno: TIMESTAMPTZ

Exemplo

SELECT CURRENT_TIMESTAMP;

Resultado:

       current_timestamp
-------------------------------
 2024-08-08 14:55:11.006068+08

CLOCK_TIMESTAMP

Retorna a hora atual real.

Sintaxe

clock_timestamp()
Ao contrário de CURRENT_TIMESTAMP e NOW() , o valor retornado muda a cada chamada, mesmo dentro de uma única instrução SQL.

Tipo de retorno: TIMESTAMPTZ

Exemplo

SELECT clock_timestamp();

Resultado:

        clock_timestamp
-------------------------------
 2024-08-08 14:57:43.569109+08

LOCALTIMESTAMP

Retorna o timestamp no início da transação atual, sem informações de fuso horário.

Sintaxe

LOCALTIMESTAMP

Tipo de retorno: TIMESTAMP

Exemplo

SELECT LOCALTIMESTAMP;

Resultado:

      localtimestamp
---------------------------
 2024-08-08 15:00:59.13245

NOW

Retorna o timestamp no início da transação atual. Equivalente a CURRENT_TIMESTAMP e TRANSACTION_TIMESTAMP().

Sintaxe

NOW()
O valor retornado não muda dentro de uma única transação.

Tipo de retorno: TIMESTAMPTZ

Exemplo

SELECT NOW();

Resultado:

              now
-------------------------------
 2024-08-08 15:02:50.270501+08

STATEMENT_TIMESTAMP

Retorna o timestamp no início da instrução atual.

Sintaxe

STATEMENT_TIMESTAMP()
O valor é consistente dentro de uma única instrução, mas difere entre instruções na mesma transação.

Tipo de retorno: TIMESTAMPTZ

Exemplo

SELECT STATEMENT_TIMESTAMP();

Resultado:

      statement_timestamp
-------------------------------
 2024-08-08 15:06:14.772939+08

TIMEOFDAY

Retorna a hora atual real como uma string de texto formatada. Semelhante a CLOCK_TIMESTAMP(), mas retorna um valor TEXT em vez de TIMESTAMPTZ.

Sintaxe

TIMEOFDAY()

Tipo de retorno: TEXT

Exemplo

SELECT TIMEOFDAY();

Resultado:

              timeofday
-------------------------------------
 Thu Aug 08 15:08:16.599369 2024 CST

TRANSACTION_TIMESTAMP

Retorna o timestamp no início da transação atual. Equivalente a CURRENT_TIMESTAMP e NOW().

Sintaxe

TRANSACTION_TIMESTAMP()
O valor retornado não muda dentro de uma única transação.

Tipo de retorno: TIMESTAMPTZ

Exemplo

SELECT TRANSACTION_TIMESTAMP();

Resultado:

     transaction_timestamp
-------------------------------
 2024-08-08 15:11:10.329005+08

Outras funções

ISFINITE

Testa se uma data ou timestamp é finito (não é infinity ou -infinity).

Sintaxe

ISFINITE(DATE)
ISFINITE(TIMESTAMP)

Tipo de retorno: BOOLEAN — retorna t se finito, f se infinito.

Exemplos

SELECT ISFINITE(date '2001-02-16');

Resultado:

 isfinite
----------
 t
SELECT ISFINITE(timestamp '2001-02-16 21:28:30');

Resultado:

 isfinite
----------
 t

Exemplos

Os exemplos a seguir mostram operações comuns de data e hora no Hologres.

Adicione 2 horas ao timestamp atual:

SELECT NOW() + interval '2 hour';

Resultado:

           ?column?
-------------------------------
 2022-12-29 13:43:58.321104+08

Obtenha o tempo de época Unix para o timestamp atual:

SELECT EXTRACT(epoch FROM current_timestamp);

Resultado:

     date_part
---------------------
 1672285506.296279

Some um valor DATE e uma coluna inteira representando meses:

CREATE TABLE date_test1(a DATE, b INT);
INSERT INTO date_test1 VALUES ('2021-09-28', '12');

SELECT a + (b || ' month')::interval FROM date_test1;

Resultado:

       ?column?
--------------------
 2022-09-28 00:00:00

Converta uma string numérica em um timestamp usando TO_CHAR e TO_TIMESTAMP:

SELECT TO_TIMESTAMP(TO_CHAR(20211027172045, '9999-99-99 99:99:99'), 'YYYY-MM-DD HH24:MI:SS');

Resultado:

     to_timestamp
----------------------
 2021-10-27 17:20:45+08

Extraia o mês do timestamp atual:

SELECT EXTRACT(mon FROM now());

Resultado:

 date_part
-----------
        12

Divida dois inteiros com precisão decimal (converta para float primeiro):

-- Integer division discards the remainder: 10/3 = 3
-- Cast to float to get a decimal result
SELECT 10 / 3::float;

Resultado:

       ?column?
---------
 3.3333333333333335