使用COALESCE处理PostgreSQL中的NULL值

ron*_*nan 54 sql database postgresql null coalesce

我有以下查询

SELECT  DISTINCT 
     pt.incentive_marketing, 
     pt.incentive_channel, 
     pt.incentive_advertising 
FROM test.pricing pt 
WHERE pt.contract_id = 90000 
group by 1,2,3 
order by pt.incentive_marketing;
Run Code Online (Sandbox Code Playgroud)

上面的查询返回o/p,如附图所示 在此输入图像描述

但是我想使用COALESCE将所有空值替换为0 请让我知道如何在上面的SELECT查询中实现这一点

现在我使用coalesce进一步修改了查询,如下所示

SELECT  
     COALESCE( pt.incentive_marketing, '0' ), 
     COALESCE(pt.incentive_channel,'0'), 
     COALESCE( pt.incentive_advertising,'0') 
FROM test.pricing pt 
WHERE pt.contract_id = 90000 
group by 1,2,3 
Run Code Online (Sandbox Code Playgroud)

其结果如图2所示.

我仍然收到一行空白值

And*_*ios 130

您可以COALESCE结合使用NULLIF以获得简短有效的解决方案:

COALESCE( NULLIF(yourField,'') , '0' )
Run Code Online (Sandbox Code Playgroud)

NULLIF如果yourField等于第二个值(''在本例中),函数将返回null ,使该COALESCE函数完全适用于所有情况:

                 QUERY                     |                RESULT 
---------------------------------------------------------------------------------
SELECT COALESCE(NULLIF(null  ,''),'0')     |                 '0'
SELECT COALESCE(NULLIF(''    ,''),'0')     |                 '0'
SELECT COALESCE(NULLIF('foo' ,''),'0')     |                 'foo'
Run Code Online (Sandbox Code Playgroud)

  • @ronan - 这个答案是正确的,也是广为接受的解决方案,我认为你应该接受这个. (6认同)

Eva*_*oll 6

如果您使用的0是一个空字符串''null指定未定义,那么您将遇到数据问题。只需更新列并修复您的架构即可。

UPDATE pt.incentive_channel
SET   pt.incentive_marketing = NULL
WHERE pt.incentive_marketing = '';

UPDATE pt.incentive_channel
SET   pt.incentive_advertising = NULL
WHERE pt.incentive_marketing = '';

UPDATE pt.incentive_channel
SET   pt.incentive_channel = NULL
WHERE pt.incentive_marketing = '';
Run Code Online (Sandbox Code Playgroud)

这将使加入和选择变得更加容易。