【问题标题】: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'

我试过了,但是没用……

【问题讨论】:

  • 为什么不加9999-01-01

标签: 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。

    它们是多态的,因此(我认为)它们支持定义排序操作​​的每种类型。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 1970-01-01
      • 2022-07-16
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多