De acordo com a documentação do PostgreSQL, existem duas funções chamadas
to_timestamp()
:- Um converte a época do Unix em um carimbo de data/hora. A época do Unix é o número de segundos desde 1970-01-01 00:00:00+00.
- O outro converte uma string em um carimbo de data/hora.
Mais especificamente, cada função converte o valor em um timestamp com fuso horário valor.
Embora a documentação do Postgres os apresente como dois
to_timestamp()
separados funções, eu as apresento como se fossem uma função que aceita um argumento ou dois. Sintaxe
Você pode usar
to_timestamp()
das seguintes maneiras:to_timestamp(double precision)
to_timestamp(text, text)
Usando a primeira sintaxe, o argumento é fornecido como uma precisão dupla value e é o valor Epoch, em precisão dupla que você deseja converter em um carimbo de data/hora.
Usando a segunda sintaxe, o primeiro argumento é a data e o segundo argumento é a string de formato.
Converter a época do Unix
Aqui está um exemplo básico para demonstrar como converter a Epoch em um timestamp.
SELECT to_timestamp(1658792421);
Resultado:
2022-07-26 09:40:21+10
No meu caso, o deslocamento do fuso horário é +10 e é isso que é retornado.
Frações de Segundos
Aqui está um exemplo com segundos fracionários.
SELECT to_timestamp(1658792421.123456);
Resultado:
2022-07-26 09:40:21.123456+10
Formatação
Aqui está um exemplo de como usar a segunda sintaxe para formatar um valor de data.
SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');
Resultado:
2022-10-21 00:00:00+10
O segundo argumento é fornecido para indicar como o primeiro argumento é formatado.
Aqui está outro formato para ilustrar ainda mais esse ponto.
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
Resultado:
2022-10-21 00:00:00+10
Se o formato do segundo argumento não corresponder ao formato do primeiro argumento, você pode acabar com um erro.
Por exemplo:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Resultado:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
A string de formato (segundo argumento) pode ser qualquer padrão de modelo com um modificador opcional.
Aqui está uma lista completa de padrões e modificadores de modelo que você pode usar com esta função.
O tipo de retorno
Conforme mencionado, o tipo de retorno é timestamp com fuso horário . Podemos verificar isso com o
pg_typeof()
função. SELECT pg_typeof(to_timestamp(1658792421.123456));
Resultado:
timestamp with time zone
Extrair Partes da Data
Você pode usar vários métodos para extrair partes de data do valor do carimbo de data/hora.
Por exemplo, você pode usar o
extract()
função. SELECT extract('month' from to_timestamp(1658792421));
Resultado:
7
E você pode usar o
to_char()
função se você precisar fazer algo como, exibir o nome do mês em vez do número do mês. SELECT to_char(to_timestamp(1658792421), 'Month');
Resultado:
July
E aqui está usando a sintaxe de formatação.
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
Resultado:
October
Se você tiver apenas o número do mês, poderá usar o exemplo a seguir para converter o número do mês no nome do mês.
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
Resultado:
March
E vice-versa (converter o nome do mês para o número do mês).
No exemplo a seguir, extraio o número do mês usando
date_part()
como uma alternativa para extract()
. SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
Resultado:
3