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.