PostgreSQL 最大的 NULL 值

Rut*_*ste 1 sql postgresql postgresql-9.6

使用 PostgreSQL,我正在寻找类似SELECT GREATEST(0,x)x 可以在哪里的东西NULL。在这种情况下x IS NULL,查询应该返回NULL,类似于 MySQL 和 Google BigQuery,而不是0PostgreSQL 中的标准行为。有没有一种简单的方法可以在没有案例和条件的情况下实现这一目标?

SELECT GREATEST(0,NULL)应该返回 NULL,而不是 0

在官方文档中:

GREATEST 和 LEAST 函数从任意数量的表达式列表中选择最大值或最小值。这些表达式必须都可以转换为通用数据类型,该数据类型将是结果的类型(详细信息请参见第 10.5 节)。列表中的 NULL 值将被忽略。仅当所有表达式的计算结果均为 NULL 时,结果才会为 NULL。

请注意,GREATEST 和 LEAST 不在 SQL 标准中,而是常见的扩展。其他一些数据库使它们在任何参数为 NULL 时返回 NULL,而不是仅当所有参数均为 NULL 时才返回 NULL。

https://www.postgresql.org/docs/9.6/functions-conditional.html

我正在寻找一个不忽略 NULL 的最伟大的函数

小智 5

您可以编写自己的函数:

create function strange_greatest(variadic p_input int[])
  returns int
as
$$
  select v
  from unnest(p_input) as t(v)
  order by t desc nulls first
  limit 1;
$$
language sql
immutable;
Run Code Online (Sandbox Code Playgroud)
create function strange_greatest(variadic p_input int[])
  returns int
as
$$
  select v
  from unnest(p_input) as t(v)
  order by t desc nulls first
  limit 1;
$$
language sql
immutable;
Run Code Online (Sandbox Code Playgroud)