比较 CASE 中的字符串



我有一个表格,上面有character varying字段,如下所示 -

Bill    Render     Refer        Supervise
1194772160  
1538359872  
1194772160  
1104026103  
1104026103  
1831124015
1740237197  1740237197  1740237197

为什么下面的查询返回空字符串 -

SELECT
CASE
WHEN render != bill THEN render
END AS renderUnique

如果要将空值比较为相等,请使用IS [NOT] DISTINCT FROM

SELECT CASE
WHEN render IS DISTINCT FROM bill THEN render
END AS renderUnique

请注意,x IS DISTINCT FROM y大致意味着 x 与 y 不同。 真值表应该有帮助:

| x    | y    | x distinct from y | x not distinct from y |
|------|------|-------------------|-----------------------|
| 1    | 1    | f                 | t                     |
| 1    | NULL | t                 | f                     |
| NULL | 1    | t                 | f                     |
| NULL | NULL | f                 | t                     |
| 1    | 2    | t                 | f                     |

由于所有行都包含bill比较列的null

render != bill

相当于:

render != null

它返回null,所以它不truecase语句返回null
您可以将其更改为:

select 
(CASE WHEN coalesce(render, '') != coalesce(bill, '') THEN render END) as renderUnique

相关内容

  • 没有找到相关文章

最新更新