sql >> Database teknologi >  >> RDS >> PostgreSQL

Generer serier af datoer - brug datotype som input

Takket være funktionstypeopløsning vi kan også sende date værdier til generate_series() fordi der er en implicit cast fra date til timestamp samt fra date til timestamptz . Ville være tvetydigt, men timestamptz er "foretrukket" blandt "Dato/tidstyper". Detaljeret forklaring:

  • Generering af tidsserier mellem to datoer i PostgreSQL

For en bar date den lokale tid 00:00 antages i rollebesætningen. Vær opmærksom på, at den aktuelle tidszoneindstilling direkte påvirker resultatet, hvis du bruger date som input, da '2014-01-10 00:00' naturligvis repræsenterer et andet tidspunkt i Tokio, end det gør i New York.

Hvordan beslutter Postgres, hvilke typer der er acceptable?

Postgres skelner grundlæggende mellem tre typer afstøbninger:

Explicit casts .. når du bruger CAST eller :: syntaks.
Assignment cast .. implicit cast, når en værdi er tildelt en målkolonne.
Implicit cast .. implicitte afstøbninger i alle andre udtryk.

Der skal være en implicit cast registreret i systemet fra inputtypen til den forventede type for at få en funktion til lydløst at acceptere (og konvertere) en inputværdi.

For at se, hvilke casts der er defineret til timestamptz , kan du forespørge i katalogtabellen pg_cast :

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 disse medvirkende er implicitte . Per dokumentation på castcontext :

Angiver hvilke sammenhænge castet kan påkaldes i. e betyder kun som en eksplicit cast (ved hjælp af CAST eller :: syntaks). a betyder implicit tildeling til en målkolonne, såvel som eksplicit. i betyder implicit i udtryk, såvel som de andre tilfælde.

Fed fremhævelse mine.




  1. Hvordan får man adgang til array internt indeks med postgreSQL?

  2. Sådan fjerner du en adgangskode fra en database i Access 2016

  3. Introduktion af ny funktion - dødvandsanalyse

  4. Hvordan konverteres 1985-02-07T00:00:00.000Z (ISO8601) til en datoværdi i Oracle?