是否有时间戳的 max 函数(带或不带时区)?

LeG*_*GEC 16 postgresql

当我调用max两个时间戳时,出现错误:

select max(now()::timestamp, to_timestamp('2021-01-01', 'YYYY-MM-DD')::timestamp);
-- ERROR:  function max(timestamp without time zone, timestamp without time zone) does not exist
Run Code Online (Sandbox Code Playgroud)

我的实际用法是在 upsert 查询中,我想在其中写:

INSERT ...
ON CONFLICT (pk) DO UPDATE SET
  ts = max(table.ts, excluded.ts)
Run Code Online (Sandbox Code Playgroud)

问题

有没有一种惯用的方法来获取 PostgreSQL 中两个时间戳之间的最大值?

S-M*_*Man 29

我猜你正在寻找该greatest()功能。

演示:db<>小提琴

max()链接到文档)是一个聚合函数,它返回一组记录的最大值。
greatest()链接到文档)采用任意数量参数的最大值 - 在您的情况下为两个。timestamp它也可以用于类型。


额外注意:取任意数量参数的最小值的函数被命名least()相同链接)(不是“最小”)