sql >> Databasteknik >  >> RDS >> PostgreSQL

Generera serier av datum - använd datumtyp som indata

Tack vare upplösning av funktionstyp vi kan också skicka date värden till generate_series() eftersom det finns en implicit cast från date till timestamp samt från date till timestamptz . Skulle vara tvetydigt, men timestamptz är "föredragen" bland "Datum/tidstyper". Detaljerad förklaring:

  • Genererar tidsserier mellan två datum i PostgreSQL

För ett blott date den lokala tiden 00:00 antas i rollistan. Var medveten om att den aktuella tidszonsinställningen direkt påverkar resultatet om du använder date som input eftersom "2014-01-10 00:00" uppenbarligen representerar en annan tidpunkt i Tokio än den gör i New York.

Hur avgör Postgres vilka typer som är acceptabla?

Postgres skiljer i princip mellan tre typer av kast:

Explicit casts .. när du använder CAST eller :: syntax.
Assignment cast .. implicit cast när ett värde tilldelas en målkolumn.
Implicit cast .. implicita gjutningar i alla andra uttryck.

Det måste finnas en implicit cast registreras i systemet från ingångstyp till förväntad typ för att få en funktion att tyst acceptera (och konvertera) ett indatavärde.

För att se vilka casts som är definierade till timestamptz , kan du fråga 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

Alla dessa rollbesättningar är implicita . Per dokumentation på castcontext :

Indikerar vilka sammanhang skådespelaren kan anropas i. e betyder endast som en explicit cast (med CAST eller :: syntax). a betyder implicit tilldelning till en målkolumn, såväl som explicit. i betyder underförstått i uttryck, såväl som de andra fallen.

Djärv betoning min.




  1. Hur man skriver en .Net-applikation som fungerar med både SqlServer och Oracle (nu när System.Data.OracleClient är utfasad)

  2. Hur tar jag bort alla dubbletter i en MySQL-tabell utan temporära tabeller

  3. Mytop – Ett användbart verktyg för att övervaka MySQL/MariaDB-prestanda i Linux

  4. oönskat inledande blanksteg i orakelnummerformat