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

Como make_timestamp() funciona no PostgreSQL


No PostgreSQL, o make_timestamp() A função permite que você crie um carimbo de data/hora de seus campos de ano, mês, dia, hora, minuto e segundos.

Sintaxe


A função tem a seguinte sintaxe:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)

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 resultado é retornado como um timestamp . Mais precisamente, é retornado como hora sem fuso horário .

Exemplo


Aqui está um exemplo básico para demonstrar.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);

Resultado:
2020-10-25 09:30:17.12

E podemos verificar o tipo de retorno com a seguinte consulta.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));

Resultado:
timestamp without time zone

O pg_typeof() função retorna o tipo de dados de seu argumento, e então eu passei make_timestamp() como argumento..

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_timestamp(2020, 13, 25, 9, 30, 17.12);

Resultado:
ERROR: date field value out of range: 2020-13-25

Nesse caso, o mês estava 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_timestamp(2020, 10, 25, 25, 30, 17.12);

Resultado:
ERROR: time field value out of range: 25:30:17.12

Passando Strings como Argumentos


A documentação do Postgres afirma que os argumentos devem ser inteiros (e precisão dupla no caso dos seconds argumento), mas passar strings também funciona (provavelmente porque elas são convertidas implicitamente em inteiros), desde que cada argumento esteja dentro de seu intervalo apropriado.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');

Resultado:
2020-12-25 10:30:17.12

Novamente podemos usar pg_type() para verificar o tipo de dados resultante.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));

Resultado:
timestamp without time zone

No entanto, você ainda precisa garantir que cada argumento seja válido uma vez convertido em um inteiro, caso contrário, você receberá um erro.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));

Resultado:
ERROR: date field value out of range: 2020-13-25

Carimbo de data e hora com fuso horário


Para criar um carimbo de data e hora com fuso horário valor, use o make_timestamptz() função.