gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:40:41 26 4
gpt4 key购买 nike

Documentation对于 generate_series 表示参数可以是 intbigint 对于 generate_series(start, stop)generate_series (start, stop, step) 案例和 timestamptimestamp 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)

最佳答案

感谢function type resolution我们也可以通过 date值为 generate_series() 因为有一个来自 date隐式 转换至 timestamp以及来自 datetimestamptz .会模棱两可,但是timestamptz在“日期/时间类型”中“首选”。详细解释:

对于裸date本地时间00:00在 Actor 阵容中被假定。请注意,如果使用 date,当前时区设置会直接影响结果。作为输入,显然,“2014-01-10 00:00”在东京代表的时间点与在纽约代表的时间点不同。

Postgres 如何决定可接受的类型?

Postgres 基本上区分 three types of casts :

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 上的手册:

Indicates what contexts the cast can be invoked in. e means only as anexplicit cast (using CAST or :: syntax). a means implicitly inassignment to a target column, as well as explicitly. i meansimplicitly in expressions, as well as the other cases.

大胆强调我的。

关于postgresql - 生成一系列日期 - 使用日期类型作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com