生成一系列日期 - 使用日期类型作为输入

Tom*_*eif 3 postgresql types timestamp postgresql-9.1 generate-series

文档generate_series说这样的说法可能是intbigint用于generate_series(start, stop)generate_series(start, stop, step)案件timestamptimestamp with time zonegenerate_series(start, stop, step interval).

generate_series使用date类型作为输入和返回的原因是什么timestamp with timezone

pg=# select generate_series('2014-01-01'::date,'2014-01-02'::date,'1 day');
    generate_series     
------------------------
 2014-01-01 00:00:00+01
 2014-01-02 00:00:00+01
(2 rows)
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 6

由于函数的类型,我们也可以通过dategenerate_series(),因为有一个隐含的投从datetimestamp以及从datetimestamptz.将是模棱两可的,但在"日期/时间类型"中timestamptz"首选 ".详细说明:

在裸露date00:00情况下,演员表示当地时间.请注意,如果您使用date输入作为输入,则当前时区设置会直接影响结果,因为很明显,"2014-01-10 00:00"代表Tokio中与纽约不同的时间点.

Postgres如何确定哪些类型可以接受?

Postgres基本上区分了三种类型的演员表:

Explicit casts..使用CAST::语法时.
Assignment cast..将值分配给目标列时的隐式转换.
Implicit cast..隐式转换所有其他表达式.

系统中必须存在从输入类型到预期类型的式转换,以使函数静默接受(和转换)输入值.

要查看定义 哪些强制类型转换timestamptz,您可以查询目录表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
Run Code Online (Sandbox Code Playgroud)

所有这些演员都是隐含的.每个文档castcontext:

指示可以调用强制转换的上下文.e仅表示显式强制转换(使用CAST::语法).a意味着隐式地分配给目标列,也明确表示.i在表达式中隐含地表示,以及其他情况.

大胆强调我的.