Categorias:

Funções de data e hora

TIMESTAMP_FROM_PARTS

Cria um carimbo de data/hora a partir de componentes numéricos individuais. Se nenhum fuso horário estiver em vigor, a função pode ser usada para criar um carimbo de data/hora a partir de uma expressão de data e hora.

Aliases:

TIMESTAMPFROMPARTS

Variações (e aliases):

TIMESTAMP_LTZ_FROM_PARTS , TIMESTAMPLTZFROMPARTS

TIMESTAMP_NTZ_FROM_PARTS , TIMESTAMPNTZFROMPARTS

TIMESTAMP_TZ_FROM_PARTS , TIMESTAMPTZFROMPARTS

Sintaxe

TIMESTAMP_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond> ] [, <time_zone> ] )

TIMESTAMP_FROM_PARTS( <date_expr>, <time_expr> )
TIMESTAMP_LTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )
TIMESTAMP_NTZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] )

TIMESTAMP_NTZ_FROM_PARTS( <date_expr>, <time_expr> )
TIMESTAMP_TZ_FROM_PARTS( <year>, <month>, <day>, <hour>, <minute>, <second> [, <nanosecond>] [, <time_zone>] )

Nota

A versão de expressão de data e hora de TIMESTAMP_FROM_PARTS só é válida quando o parâmetro de sessão TIMESTAMP_TYPE_MAPPING é definido como TIMESTAMP_NTZ.

Argumentos

Obrigatório:

year

Uma expressão inteira a ser usada como um ano para a criação de um carimbo de data/hora.

month

Uma expressão inteira a ser usada como um mês para criar um carimbo de data/hora, com janeiro representado como 1 e dezembro como 12.

day

Uma expressão inteira a ser usada como um dia para criar um carimbo de data/hora, geralmente na faixa 1-31.

hour

Uma expressão inteira a ser usada como uma hora para criar um carimbo de data/hora, geralmente na faixa 0-23.

minute

Uma expressão inteira a ser usada como um minuto para criar um carimbo de data/hora, geralmente na faixa 0-59.

second

Uma expressão inteira a ser usada como um segundo para criar um carimbo de data/hora, geralmente na faixa 0-59.

date_expr , time_expr

Especifica as expressões de data e hora a serem usadas para a criação de um carimbo de data/hora onde date_expr fornece o ano, mês e dia para o carimbo de data/hora e time_expr fornece a hora, minuto, segundo e nanossegundos dentro do dia. Válido somente para:

  • TIMESTAMP_FROM_PARTS (quando o parâmetro da sessão TIMESTAMP_TYPE_MAPPING é definido como TIMESTAMP_NTZ)

  • TIMESTAMP_NTZ_FROM_PARTS

Opcional:

nanoseconds

Uma expressão inteira a ser usada como um nanossegundo para construir um carimbo de data/hora, geralmente na faixa 0-999999999.

time_zone

Uma expressão de cadeia de caracteres a ser usada como fuso horário para a construção de um carimbo de data/hora (por exemplo, America/Los_Angeles). Válido somente para:

  • TIMESTAMP_FROM_PARTS (quando o parâmetro da sessão TIMESTAMP_TYPE_MAPPING é definido como TIMESTAMP_TZ)

  • TIMESTAMP_TZ_FROM_PARTS

Notas de uso

  • Variações de TIMESTAMP_FROM_PARTS são normalmente usadas para lidar com valores nas faixas de valores “normais” (por exemplo, meses 1-12, dias 1-31, horas 0-23 etc.); no entanto, elas também podem lidar com valores fora dessas faixas. Isto permite escolher o enésimo dia em um ano ou enésimo segundo em um dia, o que pode ser útil para simplificar alguns cálculos.

  • TIMESTAMP_FROM_PARTS é equivalente à variação especificada pelo parâmetro de sessão TIMESTAMP_TYPE_MAPPING (o padrão é TIMESTAMP_LTZ).

Exemplos

Defina as variáveis de sessão que controlam o formato de saída e o fuso horário:

ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT='YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM';
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT='YYYY-MM-DD HH24:MI:SS.FF9 TZH:TZM';
ALTER SESSION SET TIMEZONE='America/New_York';

Usando TIMESTAMP_LTZ_FROM_PARTS:

SELECT TIMESTAMP_LTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00);
+--------------------------------------------------+
| TIMESTAMP_LTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00) |
|--------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0400              |
+--------------------------------------------------+

Usando TIMESTAMP_NTZ_FROM_PARTS:

select timestamp_ntz_from_parts(2013, 4, 5, 12, 00, 00, 987654321);
+-------------------------------------------------------------+
| TIMESTAMP_NTZ_FROM_PARTS(2013, 4, 5, 12, 00, 00, 987654321) |
|-------------------------------------------------------------|
| 2013-04-05 12:00:00.987654321                               |
+-------------------------------------------------------------+

Usando TIMESTAMP_NTZ_FROM_PARTS com data e hora em vez de ano, mês, dia, hora etc..:

select timestamp_ntz_from_parts(to_date('2013-04-05'), to_time('12:00:00'));
+----------------------------------------------------------------------+
| TIMESTAMP_NTZ_FROM_PARTS(TO_DATE('2013-04-05'), TO_TIME('12:00:00')) |
|----------------------------------------------------------------------|
| 2013-04-05 12:00:00.000000000                                        |
+----------------------------------------------------------------------+

Usando TIMESTAMP_TZ_FROM_PARTS com um fuso horário padrão da sessão (‘América/Nova_York’/-0400):

select timestamp_tz_from_parts(2013, 4, 5, 12, 00, 00);
+-------------------------------------------------+
| TIMESTAMP_TZ_FROM_PARTS(2013, 4, 5, 12, 00, 00) |
|-------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0400             |
+-------------------------------------------------+

Usando TIMESTAMP_TZ_FROM_PARTS com um fuso horário especificado (‘América/Los_Angeles’/-0700); note também o uso de 0 como o argumento dos nanossegundos:

select timestamp_tz_from_parts(2013, 4, 5, 12, 00, 00, 0, 'America/Los_Angeles');
+---------------------------------------------------------------------------+
| TIMESTAMP_TZ_FROM_PARTS(2013, 4, 5, 12, 00, 00, 0, 'AMERICA/LOS_ANGELES') |
|---------------------------------------------------------------------------|
| 2013-04-05 12:00:00.000000000 -0700                                       |
+---------------------------------------------------------------------------+

Manuseio de valores fora dos intervalos normais (subtraindo 1 hora especificando -3600 segundos):

select timestamp_from_parts(2013, 4, 5, 12, 0, -3600);
+------------------------------------------------+
| TIMESTAMP_FROM_PARTS(2013, 4, 5, 12, 0, -3600) |
|------------------------------------------------|
| 2013-04-05 11:00:00.000000000                  |
+------------------------------------------------+