Postgresql 生成一系列日期-使用日期类型作为输入
对于Postgresql 生成一系列日期-使用日期类型作为输入,postgresql,types,timestamp,postgresql-9.1,generate-series,Postgresql,Types,Timestamp,Postgresql 9.1,Generate Series,对于generate_series来说,参数可以是int或者bigint对于generate_series(start,stop)和generate_series(start,stop,step)案例和timestamp或者带有时区的timestamp对于generate_series(start,stop,step interval) 是什么原因导致generate_series也使用date类型作为输入,并返回带时区的时间戳 pg=# select generate_series('2014
generate_series
来说,参数可以是int
或者bigint
对于generate_series(start,stop)
和generate_series(start,stop,step)
案例和timestamp
或者带有时区的timestamp
对于generate_series(start,stop,step interval)
是什么原因导致generate_series
也使用date
类型作为输入,并返回带时区的时间戳
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
值传递给,因为存在从date
到timestamp
的隐式转换,以及从date
到timestamp
的隐式转换。可能不明确,但在“日期/时间类型”中,timestamtz
是首选的“。详细说明:
对于裸露的日期
演员阵容中假定当地时间00:00
。请注意,如果使用date
作为输入,当前时区设置会直接影响结果,因为显然,“2014-01-10 00:00”在东京代表的时间点与在纽约不同
博士后如何决定哪些类型是可以接受的?
博士后主要区别于:
显式强制转换
。。使用CAST
或:
语法时。
作业类型转换
。。将值指定给目标列时的隐式强制转换。
隐式强制转换
。。所有其他表达式中的隐式强制转换
必须在系统中注册一个从输入类型到预期类型的隐式转换,才能使函数静默地接受(并转换)输入值
要查看哪些强制转换定义为timestamptz
,可以查询目录表:
所有这些类型转换都是隐式的。根据castcontext上的文档:
指示可以在哪些上下文中调用强制转换<代码>e
表示仅作为
显式强制转换(使用cast
或::
语法)<代码>a在
分配给目标列,以及显式分配i
表示
在表达式以及其他情况下隐式使用。
粗体强调我的解释。请注意,我最初的解释有错误。已经有几年了,但是你可能仍然对更新感兴趣。
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