嗨,我正在处理一个查询,我想做的是,每当输出为负值时,我想让它为空,下面是我的查询,有人能帮我吗?
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
。