我正在使用Postgresql数据库,我有一个列invoicehead
。我的工作如下:
SELECT * FROM invoicehead WHERE (invamt-collection_amt >= 0)
invamt type = double precision
collection_amt type = double precision
invamt的值为100.00,500.00,300.00,-250.00和 collection_amt的值全为空
因此,当我invamt-collection_amt >= 0
时,它将带有值的双精度 - null 。
我没有获得任何值作为查询结果。
如何以这样的方式进行查询:如果null应该取零效果?
答案 0 :(得分:1)
您可以添加第二个条件:
SELECT *
FROM invoicehead
WHERE invamt-collection_amt >= 0
OR (invamt-collection_amt) IS NULL
或者,您可以使用NULL
更改0
COALESCE
:
SELECT *
FROM invoicehead
WHERE COALESCE(invamt,0) - COALESCE(collection_amt,0) >= 0
NULL
值无法使用=,<>,<,>, <=,>=,...
答案 1 :(得分:1)
使用COALESCE
或IF
条件
SELECT *
FROM invoicehead
WHERE (COALESCE(invamt,0) - COALESCE(collection_amt,0)) >= 0
或者
SELECT *
FROM invoicehead
WHERE (IF(invamt IS NOT NULL, invamt ,0) - IF(collection_amt IS NOT NULL, collection_amt,0)) >= 0