sql >> Database >  >> RDS >> PostgreSQL

Hoe make_timestamp() werkt in PostgreSQL

In PostgreSQL, de make_timestamp() Met deze functie kunt u een tijdstempel maken op basis van de velden jaar, maand, dag, uur, minuten en seconden.

Syntaxis

De functie heeft de volgende syntaxis:

make_timestamp(year int, month int, day int, hour int, min int, sec double precision)

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 .

Het resultaat wordt geretourneerd als een tijdstempel . Om precies te zijn, het wordt geretourneerd als tijd zonder tijdzone .

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren.

SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);

Resultaat:

2020-10-25 09:30:17.12

En we kunnen het retourtype verifiëren met de volgende vraag.

SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));

Resultaat:

timestamp without time zone

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

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_timestamp(2020, 13, 25, 9, 30, 17.12);

Resultaat:

ERROR: date field value out of range: 2020-13-25

In dit geval viel de maand buiten het bereik en daarom werd in het bericht uitgelegd dat de waarde van het datumveld buiten het bereik viel.

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

SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);

Resultaat:

ERROR: time field value out of range: 25:30:17.12

Snaren doorgeven als argument

De Postgres-documentatie stelt dat de argumenten gehele getallen moeten zijn (en dubbele precisie in het geval van de seconds argument), maar het doorgeven van strings werkt ook (waarschijnlijk omdat ze impliciet worden geconverteerd naar gehele getallen), zolang elk argument zich binnen het juiste bereik bevindt.

SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');

Resultaat:

2020-12-25 10:30:17.12

Opnieuw kunnen we pg_type() . gebruiken om het resulterende gegevenstype te controleren.

SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));

Resultaat:

timestamp without time zone

U moet er echter nog steeds voor zorgen dat elk argument geldig is nadat het is geconverteerd naar een geheel getal, anders krijgt u een foutmelding.

SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));

Resultaat:

ERROR: date field value out of range: 2020-13-25

Tijdstempel met tijdzone

Een tijdstempel met tijdzone maken waarde, gebruik de make_timestamptz() functie.


  1. Een PostgreSQL-database importeren met phpPgAdmin

  2. Een MySQL-database repareren in cPanel

  3. Hoe Div() werkt in PostgreSQL

  4. Controleer of een tekenreeks een subtekenreeks bevat in SQL Server 2005, met behulp van een opgeslagen procedure