sql查询双精度 - null> 0不返回任何记录

时间:2015-12-19 09:37:53

标签: sql postgresql null precision

我正在使用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应该取零效果?

2 个答案:

答案 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)

使用COALESCEIF条件

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