由于函数类型解析,我们还可以将date
值传递给, 因为from to和 from togenerate_series()
都有隐式转换。会模棱两可,但在“日期/时间类型”中是“首选”。详细解释:date
timestamp
date
timestamptz
timestamptz
演员表中假定了date
当地时间。00: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
所有这些强制转换都是隐式的。每个文档castcontext
:
指示可以在哪些上下文中调用强制转换。e
仅表示作为显式强制转换(使用CAST
或::
语法)。a
意味着隐含地分配给目标列,以及显式地。i
隐含在表达式中,以及其他情况。
大胆强调我的。