如果输出为负值,如何使其为空



嗨,我正在处理一个查询,我想做的是,每当输出为负值时,我想让它为空,下面是我的查询,有人能帮我吗?

select (to_char((coalesce(14515200/3600000,0) - (coalesce(30512.65/3600,0) - (coalesce(1800/3600,0) + (coalesce(1800/3600,0))))),'FM99,999,999,999'))::character varying as test

如果想要负值的结果为NULL,请使用

nullif(greatest(/* your expression */, 0), 0)

这里唯一的缺点是,精确为0的结果也将变为NULL。如果你想避免这种情况,你可以使用一个用户定义的函数:

CREATE FUNCTION neg_to_null(double precision) RETURNS double precision
LANGUAGE plpgsql AS
'BEGIN; RETURN CASE WHEN $1 < 0.0 THEN NULL ELSE $1; END;';

我使用PL/pgSQL来避免函数内联。

将逻辑移到from子句并使用case:

select (case when test_n >= 0 then test_n::character varying end)
from (select . . .  as test_n -- your expression as number) x

如果表达式实际使用表中的值,则可以使用子查询、CTE或横向联接来定义test_n

相关内容

最新更新