我有一个表格,上面有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
,所以它不true
,case
语句返回null
。
您可以将其更改为:
select
(CASE WHEN coalesce(render, '') != coalesce(bill, '') THEN render END) as renderUnique