【问题标题】:How consider NULL as the MAX date instead of ignoring it in PostgreSQL?如何将 NULL 视为 MAX 日期而不是在 PostgreSQL 中忽略它?
【发布时间】:2021-08-20 22:21:18
【问题描述】:
我有一个表来控制用户对特定系统的访问。 “end_date”列定义了这些访问的限制日期。例如:
如果“end_date”为 NULL,则表示用户可以终身访问。考虑到这一点,当我进行查询以获取 max(end_date) 时,如何将 NULL 视为 max end_date ?
SELECT MAX(end_date) FROM user_access WHERE user_id='80076'
我试过了,但是没用……
【问题讨论】:
标签:
postgresql
postgresql-9.1
postgresql-9.3
【解决方案1】:
根据Datetimes 8.5.1.4 使用'infinity'。特殊值'无穷大日期,时间戳晚于所有其他时间戳'。
如果出于某种原因您想保留数据原样:
SELECT MAX(coalesce(end_date, 'infinity')) FROM user_access WHERE user_id='80076';
这将用 'infinity' 替换 NULL 值。
【解决方案2】:
如果您不想乱用魔法值替换,I have implemented "strict" min 和 max 函数对于任何 NULL 输入都返回 NULL。
它们是多态的,因此(我认为)它们支持定义排序操作的每种类型。