PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come funziona to_timestamp() in PostgreSQL

Secondo la documentazione di PostgreSQL, ci sono due funzioni chiamate to_timestamp() :

  • Uno converte l'epoca Unix in un timestamp. L'epoca Unix è il numero di secondi trascorsi dal 1970-01-01 00:00:00+00.
  • L'altro converte una stringa in un timestamp.

Più specificamente, ogni funzione converte il valore in un timestamp con fuso orario valore.

Sebbene la documentazione di Postgres li presenti come due to_timestamp() separati funzioni, le presento come se fossero una funzione che accetta uno o due argomenti.

Sintassi

Puoi usare to_timestamp() nei seguenti modi:

to_timestamp(double precision)
to_timestamp(text, text)

Utilizzando la prima sintassi, l'argomento viene fornito come una doppia precisione valore, ed è il valore Epoch, in doppia precisione che vuoi convertire in un timestamp.

Usando la seconda sintassi, il primo argomento è la data e il secondo argomento è la stringa di formato.

Convertire l'epoca Unix

Ecco un esempio di base per dimostrare come convertire Epoch in un timestamp.

SELECT to_timestamp(1658792421);

Risultato:

2022-07-26 09:40:21+10

Nel mio caso l'offset del fuso orario è +10 e quindi questo è ciò che viene restituito.

Secondi frazionari

Ecco un esempio con frazioni di secondi.

SELECT to_timestamp(1658792421.123456);

Risultato:

2022-07-26 09:40:21.123456+10

Formattazione

Ecco un esempio di utilizzo della seconda sintassi per formattare un valore di data.

SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');

Risultato:

2022-10-21 00:00:00+10

Il secondo argomento viene fornito per indicare come è formattato il primo argomento.

Ecco un altro formato per illustrare ulteriormente questo punto.

SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');

Risultato:

2022-10-21 00:00:00+10

Se il formato del secondo argomento non corrisponde al formato del primo argomento, potresti ricevere un errore.

Ad esempio:

SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');

Risultato:

ERROR: invalid value "ober" for "YYYY"
DETAIL: Value must be an integer.

La stringa di formato (secondo argomento) può essere qualsiasi modello di modello con un modificatore facoltativo.

Ecco un elenco completo di modelli e modificatori di modelli che puoi utilizzare con questa funzione.

Il tipo di reso

Come accennato, il tipo restituito è timestamp con fuso orario . Possiamo verificarlo con pg_typeof() funzione.

SELECT pg_typeof(to_timestamp(1658792421.123456));

Risultato:

timestamp with time zone

Estrazione delle parti della data

Puoi utilizzare vari metodi per estrarre parti di data dal valore del timestamp.

Ad esempio, puoi usare extract() funzione.

SELECT extract('month' from to_timestamp(1658792421));

Risultato:

7

E puoi usare to_char() funzione se hai bisogno di fare qualcosa come, mostra il nome del mese invece del numero del mese.

SELECT to_char(to_timestamp(1658792421), 'Month');

Risultato:

July

E qui sta usando la sintassi di formattazione.

SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');

Risultato:

October

Se hai solo il numero del mese, puoi utilizzare il seguente esempio per convertire il numero del mese nel nome del mese.

SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');

Risultato:

March

E viceversa (convertire il nome del mese in numero del mese).

Nell'esempio seguente estraggo il numero del mese usando date_part() in alternativa a extract() .

SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));

Risultato:

3