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
或者,您可以使用COALESCE
将NULL
更改为0
:
SELECT *
FROM invoicehead
WHERE COALESCE(invamt,0) - COALESCE(collection_amt,0) >= 0
NULL
值不能使用=,<>,<,>, <=,>=,...
等比较运算符直接与其他值进行比较
【讨论】:
【参考方案2】:使用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
【讨论】:
以上是关于sql查询双精度-null> 0不返回任何记录的主要内容,如果未能解决你的问题,请参考以下文章
sql 子查询中部分数据有空值,怎么返回0,NULL+数字=null出来不可以
“查询结构与函数结果类型不匹配。返回类型双精度与第 1 列中的预期类型整数不匹配。”?
sql2005查询数据库如果不符合条件是0还是false,怎么判断
在 C# 中使用非托管 C++ 代码对所有双精度类型返回 0