sql >> Databasteknik >  >> RDS >> PostgreSQL

How to_timestamp() Fungerar i PostgreSQL

Enligt PostgreSQL-dokumentationen finns det två funktioner som kallas to_timestamp() :

  • Man konverterar Unix-epoken till en tidsstämpel. Unix-epoken är antalet sekunder sedan 1970-01-01 00:00:00+00.
  • Den andra konverterar en sträng till en tidsstämpel.

Mer specifikt konverterar varje funktion värdet till en tidsstämpel med tidszon värde.

Även om Postgres-dokumentationen presenterar dem som två separata to_timestamp() funktioner presenterar jag dem som om de är en funktion som accepterar antingen ett argument eller två.

Syntax

Du kan använda to_timestamp() på följande sätt:

to_timestamp(double precision)
to_timestamp(text, text)

Med den första syntaxen tillhandahålls argumentet som en dubbel precision värde, och det är Epoch-värdet, i dubbel precision du vill konvertera till en tidsstämpel.

Med den andra syntaxen är det första argumentet datumet och det andra argumentet är formatsträngen.

Konvertera Unix Epoch

Här är ett grundläggande exempel för att visa hur man konverterar Epoch till en tidsstämpel.

SELECT to_timestamp(1658792421);

Resultat:

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

I mitt fall är tidszonsförskjutningen +10 och det är det som returneras.

Bråkdelar av sekunder

Här är ett exempel med bråkdelar av sekunder.

SELECT to_timestamp(1658792421.123456);

Resultat:

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

Formatera

Här är ett exempel på hur du använder den andra syntaxen för att formatera ett datumvärde.

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

Resultat:

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

Det andra argumentet tillhandahålls för att indikera hur det första argumentet är formaterat.

Här är ett annat format för att ytterligare illustrera denna punkt.

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

Resultat:

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

Om formatet för det andra argumentet inte matchar formatet för det första argumentet, kan du få ett fel.

Till exempel:

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

Resultat:

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

Formatsträngen (andra argumentet) kan vara vilket mallmönster som helst med en valfri modifierare.

Här är en fullständig lista över mallmönster och modifierare som du kan använda med den här funktionen.

Returtypen

Som nämnts är returtypen tidsstämpel med tidszon . Vi kan verifiera detta med pg_typeof() funktion.

SELECT pg_typeof(to_timestamp(1658792421.123456));

Resultat:

timestamp with time zone

Extrahera datumdelar

Du kan använda olika metoder för att extrahera datumdelar från tidsstämpelvärdet.

Du kan till exempel använda extract() funktion.

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

Resultat:

7

Och du kan använda to_char() funktion om du behöver göra något som att visa månadens namn istället för månadsnumret.

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

Resultat:

July

Och här använder den formateringssyntaxen.

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

Resultat:

October

Om du bara har månadsnumret kan du använda följande exempel för att konvertera månadsnumret till månadsnamnet.

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

Resultat:

March

Och vice versa (konvertera månadsnamn till månadsnummer).

I följande exempel extraherar jag månadsnumret genom att använda date_part() som ett alternativ till extract() .

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

Resultat:

3

  1. Utforska SQL Server 2016 Query Store GUI

  2. 6 funktioner för att hämta dag, månad och år från ett datum i SQL Server

  3. Importera databas till MySQL eller MariaDB

  4. SQL:Upprepa en resultatrad flera gånger och numrera raderna