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

Como to_timestamp() funciona no PostgreSQL


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