文档 for generate_series
说这个论点可以是int
or bigint
for generate_series(start, stop)
and generate_series(start, stop, step)
案例和timestamp
or timestamp with time zone
for generate_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)
谢谢函数类型解析我们也可以通过date
价值观generate_series()因为有一个implicit投射自date
to timestamp
以及来自date
to timestamptz
。会很暧昧,但是timestamptz
is “首选”在“日期/时间类型”中。详细解释:
- 在 PostgreSQL 中生成两个日期之间的时间序列
对于裸露的date
当地时间00:00
假定在演员阵容中。请注意,如果您使用,当前时区设置会直接影响结果date
作为输入,因为显然“2014-01-10 00:00”代表东京与纽约不同的时间点。
Postgres 如何决定哪些类型是可接受的?
Postgres 基本上区分三种类型的演员表:
Explicit casts
..使用时CAST
or ::
syntax.
Assignment cast
.. 将值分配给目标列时的隐式转换。
Implicit cast
.. 所有其他表达式中的隐式转换。
必须有一个implicit将在系统中注册的从输入类型转换为预期类型,以使函数默默地接受(并转换)输入值。
查看定义了哪些强制转换to timestamptz
,可以查询catalog表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
所有这些演员都是implicit。手册上castcontext:
指示可以在哪些上下文中调用转换。e
意味着仅作为
显式强制转换(使用CAST
or ::
句法)。a
隐含地意味着
分配给目标列,以及显式分配。i
方法
隐含在表达式中,以及其他情况。
大胆强调我的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)