sql >> Databáze >  >> RDS >> PostgreSQL

Vygenerujte řadu dat – jako vstup použijte typ data

Díky rozlišení typu funkce můžeme také předat date hodnoty do generate_series() protože existuje implicitní obsazení od date na timestamp stejně jako od date na timestamptz . Bylo by to nejednoznačné, ale timestamptz je "preferováno" mezi "Typy data/času". Podrobné vysvětlení:

  • Generování časových řad mezi dvěma daty v PostgreSQL

Pro holé date místní čas 00:00 se předpokládá v obsazení. Uvědomte si, že aktuální nastavení časového pásma přímo ovlivňuje výsledek, pokud použijete date jako vstup, protože '2014-01-10 00:00' samozřejmě představuje jiný časový okamžik v Tokiu než v New Yorku.

Jak Postgres rozhoduje, jaké typy jsou přijatelné?

Postgres v zásadě rozlišuje tři typy obsazení:

Explicit casts .. při použití CAST nebo :: syntaxe.
Assignment cast .. implicitní přetypování, když je hodnota přiřazena k cílovému sloupci.
Implicit cast .. implicitní přetypování ve všech ostatních výrazech.

Musí existovat implicitní cast zaregistrovaná v systému z typu vstupu na očekávaný typ, aby funkce tiše přijala (a převedla) vstupní hodnotu.

Chcete-li zjistit, která obsazení jsou definována pro timestamptz , můžete se dotazovat na tabulku katalogu 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

Všechna tato obsazení jsou implicitní . Podle dokumentace na castcontext :

Označuje, v jakých kontextech lze přetypování vyvolat. e znamená pouze jako explicitní přetypování (pomocí CAST nebo :: syntax). a znamená implicitní přiřazení k cílovému sloupci i explicitně. i znamená implicitně ve výrazech, stejně jako v ostatních případech.

Tučné zdůraznění moje.




  1. Obecné řešení Ruby pro SQLite3 LIKE nebo PostgreSQL ILIKE?

  2. Vzdálené připojení MySQL se nezdaří s neznámou metodou ověřování

  3. MariaDB LTRIM() vs LTRIM_ORACLE():Jaký je rozdíl?

  4. Počítat řádky tabulky