sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man får aktuellt datum och tid med tidszonförskjutning i PostgreSQL

Problem:

Du vill få aktuellt datum och tid med tidszonsinformation från en PostgreSQL-databas.

Lösning:

Vi använder antingen CURRENT_TIMESTAMP eller NOW() för att få aktuellt datum och tid med tidszonförskjutning.

SELECT CURRENT_TIMESTAMP ;

Här är resultatet av frågan:

2019-09-15 13:13:12.118432+02

Diskussion:

CURRENT_TIMESTAMP returnerar aktuellt datum, tid och tidszonsförskjutning (med datum, tid och tidszon för den maskin som PostgreSQL körs på). Detta returneras som ett värde i 'ÅÅÅÅ-MM-DD hh:mm:ss.nnnnnn+/-tz' formatera. I detta format:

  • ÅÅÅÅ är ett 4-siffrigt år.
  • MM är en tvåsiffrig månad.
  • DD är en tvåsiffrig dag i månaden.
  • hh är en tvåsiffrig timme.
  • mm är en tvåsiffrig minut.
  • ss är en tvåsiffrig sekund.
  • nnnnnn definierar antalet bråksekunder (d.v.s. precisionen) från 0 till 6.
  • +tz eller -tz är tidszonens förskjutning, antingen plus eller minus från UTC.

Som du märker har denna funktion inga parenteser. Men om du vill visa ett datum och en tid med en specifik precision kan du använda det valfria heltalsargumentet. Den returnerar ett datum och en tid med bråkdelar av sekunder och tidszonförskjutning. Detta argument måste ligga inom intervallet 0 till 6; 0 är inga bråkdelar, 1 är en bråkdelssekund (t.ex. en plats bakom decimalen), etc. Titta på nästa exempel:

SELECT CURRENT_TIMESTAMP(3) ;

Här är resultatet av frågan:

2019-09-15 13:01:51.142+02

Detta resultat innehåller en 3-siffrig bråkdelssekund eftersom vi sätter 3 som argument i funktionen CURRENT_TIMESTAMP. Tidszonförskjutningen visas fortfarande i slutet.

Tiden som returneras av den här funktionen ändras inte under transaktioner eller en enda fråga. Det är alltid den tidpunkt då transaktionen startade.

NOW() liknar CURRENT_TIMESTAMP funktion och returnerar samma resultat. Skillnaden är att CURRENT_TIMESTAMP är SQL-standardfunktionen, medan NOW() är specifik för PostgreSQL.

SELECT NOW() ;

Här är resultatet av frågan:

2019-08-27 12:18:55.324145+02

Observera att funktionen NOW() kräver hakparenteser. Du kan dock lämna dem tomma och få standardvärdet.

CURRENT_TIMESTAMP och NOW() returnerar timestamptz datatyp.


  1. Fallgropar att undvika när du använder den nya Microsoft SSMA version 7.8

  2. Upptäck om ett värde innehåller minst en numerisk siffra i Oracle

  3. Kör inbyggd sql med viloläge

  4. TO_DATE() Funktion i Oracle