Dankzij functietype resolutie we kunnen ook date
doorgeven waarden naar generate_series()
omdat er een impliciete . is casten vanaf date
naar timestamp
evenals vanaf date
naar timestamptz
. Zou dubbelzinnig zijn, maar timestamptz
is "voorkeur" onder "Datum/tijd-types". Gedetailleerde uitleg:
- Tijdreeksen genereren tussen twee datums in PostgreSQL
Voor een kale date
de lokale tijd 00:00
wordt aangenomen in de cast. Houd er rekening mee dat de huidige tijdzone-instelling rechtstreeks van invloed is op het resultaat als u date
gebruikt als input aangezien '2014-01-10 00:00' uiteraard een ander tijdstip in Tokio vertegenwoordigt dan in New York.
Hoe bepaalt Postgres welke soorten acceptabel zijn?
Postgres maakt in principe onderscheid tussen drie soorten casts:
Explicit casts
.. bij gebruik van CAST
of ::
syntaxis.Assignment cast
.. impliciete cast wanneer een waarde wordt toegewezen aan een doelkolom.Implicit cast
.. impliciete casts in alle andere uitdrukkingen.
Er moet een impliciete . zijn cast geregistreerd in het systeem van het invoertype naar het verwachte type om een functie stil een invoerwaarde te laten accepteren (en om te zetten).
Om te zien welke casts zijn gedefinieerd tot timestamptz
, kunt u de catalogustabel pg_cast
. opvragen :
SELECT castsource::regtype, casttarget::regtype, castcontext
FROM pg_cast
WHERE casttarget = 'timestamptz'::regtype;
castsource | casttarget | castcontext
-----------------------------+--------------------------+-------------
abstime | timestamp with time zone | i
date | timestamp with time zone | i
timestamp without time zone | timestamp with time zone | i
timestamp with time zone | timestamp with time zone | i
Al deze casts zijn impliciet . Per documentatie op castcontext
:
Geeft aan in welke context de cast kan worden aangeroepen.
e
betekent alleen als een expliciete cast (met behulp vanCAST
of::
syntaxis).a
betekent impliciet toewijzen aan een doelkolom, evenals expliciet.i
betekent impliciet in uitdrukkingen, evenals de andere gevallen.
Vetgedrukte nadruk van mij.