PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Datumsreihe generieren - Datumstyp als Eingabe verwenden

Dank Funktionstypauflösung wir können auch date übergeben Werte zu generate_series() weil es ein implizites gibt Besetzung ab date zu timestamp sowie ab date zu timestamptz . Wäre mehrdeutig, aber timestamptz ist "bevorzugt" unter "Datums-/Zeittypen". Ausführliche Erklärung:

  • Generieren von Zeitreihen zwischen zwei Daten in PostgreSQL

Für ein bloßes date Ortszeit 00:00 wird in der Besetzung angenommen. Beachten Sie, dass die aktuelle Zeitzoneneinstellung das Ergebnis direkt beeinflusst, wenn Sie date verwenden als Eingabe, da '2014-01-10 00:00' in Tokio offensichtlich einen anderen Zeitpunkt darstellt als in New York.

Wie entscheidet Postgres, welche Typen akzeptabel sind?

Postgres unterscheidet grundsätzlich zwischen drei Arten von Casts:

Explicit casts .. bei Verwendung von CAST oder :: Syntax.
Assignment cast .. implizite Umwandlung, wenn einer Zielspalte ein Wert zugewiesen wird.
Implicit cast .. implizite Casts in allen anderen Ausdrücken.

Es muss ein implizites geben im System registrierte Umwandlung vom Eingabetyp in den erwarteten Typ, damit eine Funktion stillschweigend einen Eingabewert akzeptiert (und umwandelt).

Um zu sehen, welche Casts für definiert sind timestamptz können Sie die Katalogtabelle pg_cast abfragen :

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

Alle diese Umwandlungen sind implizit . Per Dokumentation zu castcontext :

Gibt an, in welchen Kontexten die Umwandlung aufgerufen werden kann. e bedeutet nur als expliziter Cast (mit CAST oder :: Syntax). a bedeutet sowohl implizite Neuzuweisung zu einer Zielspalte als auch explizit. i bedeutet implizit in Ausdrücken sowie in den anderen Fällen.

Fettdruck von mir.