Ifølge PostgreSQL-dokumentationen er der to funktioner kaldet to_timestamp()
:
- Man konverterer Unix-epoken til et tidsstempel. Unix-epoken er antallet af sekunder siden 1970-01-01 00:00:00+00.
- Den anden konverterer en streng til et tidsstempel.
Mere specifikt konverterer hver funktion værdien til et tidsstempel med tidszone værdi.
Selvom Postgres-dokumentationen præsenterer dem som to separate to_timestamp()
funktioner, præsenterer jeg dem, som om de er én funktion, der accepterer enten et argument eller to.
Syntaks
Du kan bruge to_timestamp()
på følgende måder:
to_timestamp(double precision)
to_timestamp(text, text)
Ved at bruge den første syntaks leveres argumentet som en dobbelt præcision værdi, og det er Epoch-værdien, i dobbelt præcision, du ønsker konverteret til et tidsstempel.
Ved at bruge den anden syntaks er det første argument datoen, og det andet argument er formatstrengen.
Konverter Unix-epoken
Her er et grundlæggende eksempel til at demonstrere, hvordan man konverterer Epoch til et tidsstempel.
SELECT to_timestamp(1658792421);
Resultat:
2022-07-26 09:40:21+10
I mit tilfælde er tidszoneforskydningen +10, og det er det, der returneres.
Brøkdele af sekunder
Her er et eksempel med brøkdele af sekunder.
SELECT to_timestamp(1658792421.123456);
Resultat:
2022-07-26 09:40:21.123456+10
Formattering
Her er et eksempel på brug af den anden syntaks til at formatere en datoværdi.
SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');
Resultat:
2022-10-21 00:00:00+10
Det andet argument er angivet, hvordan det første argument er formateret.
Her er et andet format for yderligere at illustrere dette punkt.
SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');
Resultat:
2022-10-21 00:00:00+10
Hvis formatet på det andet argument ikke matcher formatet på det første argument, kan du ende med en fejl.
For eksempel:
SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');
Resultat:
ERROR: invalid value "ober" for "YYYY" DETAIL: Value must be an integer.
Formatstrengen (andet argument) kan være et hvilket som helst skabelonmønster med en valgfri modifikator.
Her er en komplet liste over skabelonmønstre og modifikatorer, som du kan bruge med denne funktion.
Returtypen
Som nævnt er returtypen tidsstempel med tidszone . Vi kan bekræfte dette med pg_typeof()
funktion.
SELECT pg_typeof(to_timestamp(1658792421.123456));
Resultat:
timestamp with time zone
Udtrækning af datodele
Du kan bruge forskellige metoder til at udtrække datodele fra tidsstemplets værdi.
For eksempel kan du bruge extract()
funktion.
SELECT extract('month' from to_timestamp(1658792421));
Resultat:
7
Og du kan bruge to_char()
funktion, hvis du har brug for at gøre noget som at vise månedens navn i stedet for månedsnummeret.
SELECT to_char(to_timestamp(1658792421), 'Month');
Resultat:
July
Og her bruger den formateringssyntaksen.
SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');
Resultat:
October
Hvis du kun har månedsnummeret, kan du bruge følgende eksempel til at konvertere månedsnummeret til månedsnavnet.
SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');
Resultat:
March
Og omvendt (konverter månedsnavn til månedsnummer).
I det følgende eksempel udtrækker jeg månedsnummeret ved at bruge date_part()
som et alternativ til extract()
.
SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));
Resultat:
3