PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como make_timestamptz() funciona no PostgreSQL


No PostgreSQL, o make_timestamptz() A função permite que você crie um timestamp com fuso horário de seus campos de ano, mês, dia, hora, minuto e segundos, bem como um campo opcional de fuso horário.

Sintaxe


A função tem a seguinte sintaxe:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

Onde year , month e day são números inteiros que representam o ano, mês e dia da data e hour é a parte da hora, min é a parte dos minutos e sec é a parte dos segundos.

A hora e os minutos são fornecidos como um inteiro , os segundos são fornecidos como precisão dupla .

O timezone opcional argumento é para o fuso horário. Se não for especificado, o fuso horário atual será usado.

O resultado é retornado como um horário com fuso horário .

Exemplo


Aqui está um exemplo básico para demonstrar.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

Resultado:
1999-03-14 10:35:12.15+10

Nesse caso, não forneci um fuso horário, então usei o fuso horário atual.

Podemos verificar o tipo de retorno com a seguinte consulta.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

Resultado:
timestamp with time zone

O pg_typeof() A função retorna o tipo de dado de seu argumento, então eu passei make_timestamptz() como o argumento.

Especificar um fuso horário


Neste exemplo, forneço explicitamente um fuso horário.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

Resultado:
1999-03-14 16:35:12.15+10

Aqui está outro exemplo, mas com vários valores de fuso horário.
\x
SELECT 
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');

Resultado (usando saída vertical):
make_timestamptz | 1999-12-31 23:31:00+10
make_timestamptz | 2000-01-01 00:31:00+10
make_timestamptz | 2000-01-01 15:01:00+10
make_timestamptz | 2000-01-01 09:01:00+10
make_timestamptz | 2000-01-01 11:01:00+10
make_timestamptz | 1999-12-31 21:01:00+10

Neste exemplo eu usei \x para habilitar a exibição expandida (também conhecida como “saída vertical”) para facilitar a leitura dos resultados.

Inserindo \x alterna a exibição expandida (ou seja, ativa e desativa).

Consulte Retornar uma lista de fusos horários suportados pelo PostgreSQL para obter uma lista de fusos horários válidos.

Fora do alcance


Se algum dos argumentos estiver fora do intervalo dos valores possíveis para sua parte de data, você receberá um erro "fora do intervalo".
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);

Resultado:
ERROR: date field value out of range: 1999-03-32

Nesse caso, o dia era 32, o que está fora do intervalo e, portanto, a mensagem explicava que o valor do campo de data estava fora do intervalo.

Se apenas o valor do campo de tempo estiver fora do intervalo, o erro será redigido de acordo.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);

Resultado:
ERROR: time field value out of range: 10:61:12.15

Neste caso, os minutes argumento é 61, que está fora do intervalo.

Carimbo de data e hora sem fuso horário


Para criar um timestamp sem fuso horário, use o make_timestamp() função.