I PostgreSQL kan du använda to_date()
funktion för att konvertera en sträng till ett datum.
Syntax
Syntaxen ser ut så här:
to_date(text, text)
Där det första argumentet är en strängrepresentation av datumet och det andra argumentet definierar mallen som det första argumentet använder.
Exempel
Här är ett grundläggande exempel att visa.
SELECT to_date('10 Feb 2010', 'DD Mon YYYY');
Resultat:
2010-02-10
Mallar
Det andra argumentet tillhandahåller mallen som det första argumentet tillhandahålls i. Detta kallas ibland för en "formatsträng".
Mallen består av ett eller flera mallmönster och valfritt en eller flera mallmönstermodifierare.
Mallmönster
Med hjälp av föregående exempel, DD
är ett mallmönster och Mon
är ett mallmönster. YYYY
är också ett mallmönster. Dessa kombinerades alla för att bilda mallen.
Du kan flytta runt varje mallmönster efter behov. Och du kan använda olika mallmönster helt och hållet.
Här är några fler exempel som använder samma datum, men i olika format (och därför med olika mallar).
\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 (med vertikal utdata):
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 använder alla samma datum, men datumet tillhandahålls i olika format. Det är mallens uppgift att uttryckligen ange för Postgres vilket format datumet har angetts i.
Som du förmodligen kan föreställa dig, om vi inte tillhandahåller mallen, kan vissa datum tolkas på fel sätt, särskilt om datumet använder en annan lokalitet för sitt format.
Till exempel kan 01/03/2010 tolkas som den första mars eller den tredje januari, beroende på språket.
Mallmönstermodifierare
Ibland kan du också behöva lägga till en mallmönstermodifierare till mallen.
Om ditt datum till exempel använder ett ordningstalssuffix måste du se till att det tolkas som det.
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 (med vertikal utdata):
10th Feb 2010 | 2010-02-10 01st Feb 2010 | 2010-02-01 03rd Feb 2010 | 2010-02-03
Om jag inte hade använt mallmönstermodifieraren skulle jag ha fått ett felmeddelande när jag använde dessa datum.
Här är ett exempel för att illustrera.
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.
Fullständig lista över mallmönster och modifierare
Postgres innehåller många fler mallmönster och modifierare.
Dessa kan också användas vid formatering av datum/tidsvärden (till exempel när du använder to_char()
funktion för att konvertera en tidsstämpel till en sträng).
Se mallmönster och modifierare för formatering av datum/tid i PostgreSQL för en fullständig lista.