sql >> Database >  >> RDS >> PostgreSQL

Hoe make_timestamptz() werkt in PostgreSQL

In PostgreSQL, de make_timestamptz() functie stelt u in staat om een ​​tijdstempel met tijdzone te maken uit de velden jaar, maand, dag, uur, minuten en seconden, evenals een optioneel tijdzoneveld.

Syntaxis

De functie heeft de volgende syntaxis:

make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

Waar year , month , en day zijn gehele getallen die het jaar, de maand en de dag van de datum vertegenwoordigen, en hour is het uurgedeelte, min is het minutengedeelte, en sec is het tweede deel.

Het uur en de minuten worden weergegeven als een geheel getal , de seconden worden geleverd als dubbele precisie .

De optionele timezone argument is voor de tijdzone. Als het niet is opgegeven, wordt de huidige tijdzone gebruikt.

Het resultaat wordt geretourneerd als een tijd met tijdzone .

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

Resultaat:

1999-03-14 10:35:12.15+10

In dit geval heb ik geen tijdzone opgegeven, dus de huidige tijdzone gebruikt.

We kunnen het retourtype verifiëren met de volgende vraag.

SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

Resultaat:

timestamp with time zone

De pg_typeof() functie retourneert het gegevenstype van zijn argument, en dus heb ik make_timestamptz() . doorgegeven als het argument.

Geef een tijdzone op

In dit voorbeeld geef ik expliciet een tijdzone op.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

Resultaat:

1999-03-14 16:35:12.15+10

Hier is nog een voorbeeld, maar met verschillende tijdzonewaarden.

\x
SELECT 
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');

Resultaat (met verticale uitvoer):

make_timestamptz | 1999-12-31 23:31:00+10
make_timestamptz | 2000-01-01 00:31:00+10
make_timestamptz | 2000-01-01 15:01:00+10
make_timestamptz | 2000-01-01 09:01:00+10
make_timestamptz | 2000-01-01 11:01:00+10
make_timestamptz | 1999-12-31 21:01:00+10

In dit voorbeeld gebruikte ik \x om uitgebreide weergave in te schakelen (ook bekend als "verticale uitvoer") om de resultaten beter leesbaar te maken.

\x . invoeren schakelt tussen uitgebreide weergave (d.w.z. het schakelt het in en uit).

Zie Een lijst met door PostgreSQL ondersteunde tijdzones retourneren voor een lijst met geldige tijdzones.

Buiten bereik

Als een van de argumenten buiten het bereik van de mogelijke waarden voor het datumgedeelte valt, krijgt u de foutmelding 'buiten bereik'.

SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);

Resultaat:

ERROR: date field value out of range: 1999-03-32

In dit geval was de dag 32, wat buiten bereik is, en dus legde het bericht uit dat de waarde van het datumveld buiten bereik was.

Als alleen de waarde van het tijdveld buiten het bereik valt, wordt de fout dienovereenkomstig geformuleerd.

SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);

Resultaat:

ERROR: time field value out of range: 10:61:12.15

In dit geval de minutes argument is 61, wat buiten bereik is.

Tijdstempel zonder tijdzone

Gebruik de make_timestamp() . om een ​​tijdstempel zonder tijdzone te maken functie.


  1. Verbinding maken met Sage vanuit Java

  2. Verborgen functie:slepen en neerzetten van toegang tot objecten tussen bestanden

  3. Een door komma's gescheiden tekenreeks omzetten in afzonderlijke rijen

  4. SQL Server Failover Cluster Installatie -1