sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan får du den aktuelle dato og tid med tidszoneforskydning i PostgreSQL

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.


  1. Konvertering mislykkedes ved konvertering af dato og/eller klokkeslæt fra tegnstreng, mens dato og klokkeslæt blev indsat

  2. Sådan får du en liste over aktiverede/deaktiverede tjekbegrænsninger i SQL Server-databasen - SQL Server / TSQL-vejledning, del 86

  3. Revision af PostgreSQL ved hjælp af pgAudit

  4. Eksporter data til JSON-fil i Oracle 11g ved hjælp af PL/SQL