Problem:
Du vil gerne have den aktuelle dato og tid med tidszoneoplysninger fra en PostgreSQL-database.
Løsning:
Vi bruger enten CURRENT_TIMESTAMP eller NOW() for at få den aktuelle dato og klokkeslæt med tidszoneforskydning.
SELECT CURRENT_TIMESTAMP ;
Her er resultatet af forespørgslen:
2019-09-15 13:13:12.118432+02
Diskussion:
CURRENT_TIMESTAMP
returnerer den aktuelle dato, klokkeslæt og tidszoneforskydning (ved hjælp af dato, klokkeslæt og tidszone på den maskine, som PostgreSQL kører på). Dette returneres som en værdi i 'ÅÅÅÅ-MM-DD tt:mm:ss.nnnnnn+/-tz' format. I dette format:
- ÅÅÅÅ er et 4-cifret årstal.
- MM er en 2-cifret måned.
- DD er en 2-cifret dag i måneden.
- hh er en 2-cifret time.
- mm er et 2-cifret minut.
- ss er et 2-cifret sekund.
- nnnnnn definerer antallet af brøksekunder (dvs. præcisionen) fra 0 til 6.
- +tz eller -tz er tidszoneforskydningen, enten plus eller minus fra UTC.
Som du bemærker, har denne funktion ingen parenteser. Men hvis du vil vise en dato og tid med en bestemt præcision, kan du bruge det valgfri heltalsargument. Det returnerer en dato og et klokkeslæt med brøkdele af sekunder og tidszoneforskydningen. Dette argument skal være i området fra 0 til 6; 0 er ingen brøksekunder, 1 er et brøksekund (f.eks. én plads bag decimalen) osv. Se på det næste eksempel:
SELECT CURRENT_TIMESTAMP(3) ;
Her er resultatet af forespørgslen:
2019-09-15 13:01:51.142+02
Dette resultat indeholder et 3-cifret brøksekund, fordi vi sætter 3 som argument i funktionen CURRENT_TIMESTAMP. Tidszoneforskydningen vises stadig i slutningen.
Tiden returneret af denne funktion ændres ikke under transaktioner eller en enkelt forespørgsel. Det er altid det tidspunkt, hvor transaktionen startede.
NOW() ligner CURRENT_TIMESTAMP
funktion og returnerer det samme resultat. Forskellen er, at CURRENT_TIMESTAMP
er SQL-standardfunktionen, mens NOW() er specifik for PostgreSQL.
SELECT NOW() ;
Her er resultatet af forespørgslen:
2019-08-27 12:18:55.324145+02
Bemærk, at funktionen NOW() kræver parenteser. Du kan dog lade dem være tomme og få standardværdien.
CURRENT_TIMESTAMP og NOW() returnerer timestamptz datatype.