sql >> Database >  >> RDS >> PostgreSQL

Hoe u de huidige datum en tijd kunt krijgen met tijdzoneverschuiving in PostgreSQL

Probleem:

U wilt de huidige datum en tijd met tijdzone-informatie uit een PostgreSQL-database halen.

Oplossing:

We gebruiken CURRENT_TIMESTAMP of NOW() om de huidige datum en tijd te krijgen met de tijdzoneverschuiving.

SELECT CURRENT_TIMESTAMP ;

Dit is het resultaat van de zoekopdracht:

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

Discussie:

CURRENT_TIMESTAMP geeft de huidige datum, tijd en tijdzone-offset terug (met behulp van de datum, tijd en tijdzone van de machine waarop PostgreSQL wordt uitgevoerd). Dit wordt geretourneerd als een waarde in de 'YYYY-MM-DD uu:mm:ss.nnnnnn+/-tz' formaat. In dit formaat:

  • JJJJ is een jaartal van 4 cijfers.
  • MM is een 2-cijferige maand.
  • DD is een 2-cijferige dag van de maand.
  • uu is een 2-cijferig uur.
  • mm is een 2-cijferige minuut.
  • ss is een seconde van twee cijfers.
  • nnnnnn definieert het aantal fractionele seconden (d.w.z. de precisie) van 0 tot 6.
  • +tz of -tz is de tijdzone-offset, plus of min van UTC.

Zoals u ziet, heeft deze functie geen haakjes. Als u echter een datum en tijd met een specifieke precisie wilt weergeven, kunt u het optionele integer-argument gebruiken. Het retourneert een datum en tijd met fractionele seconden en de tijdzone-offset. Dit argument moet tussen 0 en 6 liggen; 0 is geen fractie van een seconde, 1 is een fractie van een seconde (bijvoorbeeld een plaats achter de komma), enz. Bekijk het volgende voorbeeld:

SELECT CURRENT_TIMESTAMP(3) ;

Dit is het resultaat van de zoekopdracht:

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

Dit resultaat bevat een 3-cijferige fractionele seconde omdat we 3 als argument in de CURRENT_TIMESTAMP-functie plaatsen. De tijdzone-offset verschijnt nog steeds aan het einde.

De tijd die door deze functie wordt geretourneerd, verandert niet tijdens transacties of een enkele zoekopdracht. Het is altijd het tijdstip waarop de transactie is gestart.

NOW() is vergelijkbaar met de CURRENT_TIMESTAMP functie en geeft hetzelfde resultaat. Het verschil is dat CURRENT_TIMESTAMP is de standaard SQL-functie, terwijl NOW() specifiek is voor PostgreSQL.

SELECT NOW() ;

Dit is het resultaat van de zoekopdracht:

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

Merk op dat de functie NU() haakjes vereist. U kunt ze echter leeg laten en de standaardwaarde krijgen.

CURRENT_TIMESTAMP en NOW() retourneren de timestamptz gegevenstype.


  1. 7 feiten over SQL Server-synoniemen die u moet kennen

  2. Sequentiële doorvoersnelheden en feeds

  3. DROP-FUNCTIE zonder het aantal/type parameters te kennen?

  4. Back-up/herstel van MySQL/MariaDB en PostgreSQL met behulp van de hulpprogramma's 'Automysqlbackup' en 'Autopostgresqlbackup'