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)
如果您使用的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)
这将使加入和选择变得更加容易。
| 归档时间: |
|
| 查看次数: |
106162 次 |
| 最近记录: |