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

Posted

技术标签:

【中文标题】sql查询双精度-null> 0不返回任何记录【英文标题】:sql query double precision - null >0 not returning any record 【发布时间】:2015-12-19 09:37:52 【问题描述】:

我正在使用 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 的值全部为 null

所以当我执行invamt-collection_amt >= 0 时,它将是双精度值 - null

我没有得到任何值作为查询结果。

如何进行查询,如果为null,则效果为零?

【问题讨论】:

【参考方案1】:

您可以添加第二个条件:

SELECT * 
FROM invoicehead 
WHERE invamt-collection_amt >= 0 
   OR (invamt-collection_amt) IS NULL

或者,您可以使用COALESCENULL 更改为0

SELECT * 
FROM invoicehead 
WHERE COALESCE(invamt,0) - COALESCE(collection_amt,0) >= 0 

NULL 值不能使用=,<>,<,>, <=,>=,... 等比较运算符直接与其他值进行比较

【讨论】:

【参考方案2】:

使用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 

【讨论】:

以上是关于sql查询双精度-null> 0不返回任何记录的主要内容,如果未能解决你的问题,请参考以下文章

sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以

“查询结构与函数结果类型不匹配。返回类型双精度与第 1 列中的预期类型整数不匹配。”?

sql2005查询数据库如果不符合条件是0还是false,怎么判断

在 C# 中使用非托管 C++ 代码对所有双精度类型返回 0

DecimalFormat 为负双精度输入返回“?”而不是“-”

JDBC:jtds getString() 以科学计数法返回双精度数