generate_series
的{{3}}表示int
和bigint
个案例和generate_series(start, stop)
或generate_series(start, stop, step)
或timestamp
或timestamp with time zone
或generate_series(start, stop, step interval)
或generate_series
date
的{{1}}。
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)
类型用作输入并返回{{1}},这是什么原因?
{{1}}
答案 0 :(得分:6)
感谢function type resolution我们还可以将date
值传递给generate_series()
,因为从date
到{{1}有隐式广告}以及从timestamp
到date
。不明确,但“日期/时间类型”中timestamptz
“首选”。详细解释:
对于裸timestamptz
,在演员表中假设当地时间date
。请注意,如果您使用00:00
作为输入,则当前时区设置会直接影响结果,因为显然,“2014-01-10 00:00”代表Tokio中与纽约不同的时间点
Postgres基本上区分three types of casts:
date
..使用Explicit casts
或CAST
语法时
::
..将值分配给目标列时隐式转换
Assignment cast
..隐式转换所有其他表达式。
必须在系统中注册从输入类型到期望类型的隐式强制转换,才能使函数静默接受(并转换)输入值。
要查看哪些演员表已定义到 Implicit cast
,您可以查询目录表pg_cast
:
timestamptz
所有这些演员都是隐式的。关于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
表示 隐含在表达式中,以及其他情况。
大胆强调我的。