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.