I PostgreSQL kan du bruge to_date()
funktion til at konvertere en streng til en dato.
Syntaks
Syntaksen ser sådan ud:
to_date(text, text)
Hvor det første argument er en strengrepræsentation af datoen, og det andet argument definerer skabelonen, som det første argument bruger.
Eksempel
Her er et grundlæggende eksempel at demonstrere.
SELECT to_date('10th Feb 2010', 'DD Mon YYYY');
Resultat:
2010-02-10
Skabeloner
Det andet argument giver skabelonen, som det første argument er angivet i. Dette kaldes nogle gange som en "formatstreng".
Skabelonen består af et eller flere skabelonmønstre og eventuelt en eller flere skabelonmønstermodifikatorer.
Skabelonmønstre
Ved at bruge det forrige eksempel, DD
er et skabelonmønster og Mon
er et skabelonmønster. YYYY
er også et skabelonmønster. Disse blev alle kombineret for at danne skabelonen.
Du kan flytte rundt på hvert skabelonmønster efter behov. Og du kan bruge forskellige skabelonmønstre helt.
Her er nogle flere eksempler, der bruger den samme dato, men i forskellige formater (og derfor bruger forskellige skabeloner).
\x
SELECT
to_date('10 Feb 2010', 'DD Mon YYYY') AS "DD Mon YYYY",
to_date('Feb 10 2010', 'Mon DD YYYY') AS "Mon DD YYYY",
to_date('10/02/2010', 'DD/MM/YYYY') AS "DD/MM/YYYY",
to_date('02/10/2010', 'MM/DD/YYYY') AS "MM/DD/YYYY",
to_date('02-10-2010', 'MM-DD-YYYY') AS "MM-DD-YYYY",
to_date('02102010', 'MMDDYYYY') AS "MMDDYYYY",
to_date('02-10-10', 'MM-DD-YY') AS "MM-DD-YY";
Resultat (ved hjælp af lodret output):
DD Mon YYYY | 2010-02-10 Mon DD YYYY | 2010-02-10 DD/MM/YYYY | 2010-02-10 MM/DD/YYYY | 2010-02-10 MM-DD-YYYY | 2010-02-10 MMDDYYYY | 2010-02-10 MM-DD-YY | 2010-02-10
Så de bruger alle den samme dato, men datoen leveres i forskellige formater. Det er skabelonens opgave eksplicit at angive over for Postgres, hvilket format datoen er angivet i.
Som du sikkert kan forestille dig, hvis vi ikke leverede skabelonen, kunne nogle datoer blive fortolket på den forkerte måde, især hvis datoen bruger en anden lokalitet til sit format.
For eksempel kan 01/03/2010 fortolkes som den første marts eller den tredje januar, afhængigt af lokaliteten.
Skabelonmønstermodifikatorer
Nogle gange skal du måske også tilføje en skabelonmønstermodifikator til skabelonen.
Hvis din dato f.eks. bruger et ordenstalssuffiks, skal du sikre dig, at det fortolkes som sådan.
SELECT
to_date('10th Feb 2010', 'DDth Mon YYYY') AS "10th Feb 2010",
to_date('01st Feb 2010', 'DDth Mon YYYY') AS "01st Feb 2010",
to_date('03rd Feb 2010', 'DDth Mon YYYY') AS "03rd Feb 2010";
Resultat (ved hjælp af lodret output):
10th Feb 2010 | 2010-02-10 01st Feb 2010 | 2010-02-01 03rd Feb 2010 | 2010-02-03
Hvis jeg ikke havde brugt skabelonmønstermodifieren, ville jeg have modtaget en fejl, da jeg brugte disse datoer.
Her er et eksempel til illustration.
SELECT to_date('10th Feb 2010', 'DD Mon YYYY');
Resultat:
ERROR: invalid value "th" for "Mon" DETAIL: The given value did not match any of the allowed values for this field.
Fuld liste over skabelonmønstre og modifikatorer
Postgres indeholder mange flere skabelonmønstre og modifikatorer.
Disse kan også bruges ved formatering af dato/tidsværdier (for eksempel ved brug af to_char()
funktion til at konvertere et tidsstempel til en streng).
Se skabelonmønstre og modifikatorer for formatering af dato/klokkeslæt i PostgreSQL for en komplet liste.