Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 两列之间的值减法_Sql - Fatal编程技术网

Sql 两列之间的值减法

Sql 两列之间的值减法,sql,Sql,这是两个有数据的电话 Table1 Table2 ID ColA ID ColB 01 10 01 20 02 20 02 Null 03 30

这是两个有数据的电话

Table1                                    Table2
ID ColA                                   ID ColB
01 10                                     01 20
02 20                                     02 Null
03 30                                     03 30
04 25                                     04 Null
所以我想从Col1减到Col2

我已经编写了sql查询,但它不能正常工作

select (Table1.ColA-Table2.ColB)as Temp from Table1 
inner join Table2 on Table1.ID Table2.ID
所以我的问题是,当从表2中获取空值时,时间减法并没有完成,那么如何解决这个问题呢


我想在值为null时,将时间值设为0

您可以使用COALESCE将默认值
null
设置为
0

select COALESCE(Table1.ColA, 0) - COALESCE(Table2.ColB, 0) as Temp 
from Table1 inner join Table2 on Table1.ID Table2.ID
COALESCE接受多个参数并返回第一个非空值


在某些数据库中,如果只需要两个参数,则有一个用于合并的速记函数。这些函数的名称可能类似于
nvl
ifnull
isnull
,具体取决于数据库,也可能根本不存在<另一方面,code>COALESCE本身在大多数数据库中都可用,因此它是一个不错的选择。

如果您使用SQL Server或TSQL,请使用
isnull()
,如下所示:

select (isnull(Table1.ColA, 0) - isnull(Table2.ColB, 0))as Temp from Table1 
inner join Table2 on Table1.ID Table2.ID

如果使用其他DBMS,请使用
COALESCE
ifnull()
而不是
isnull()

尝试sql或mysql的ifnull函数

select ((IFNULL(Table1.ColA, 0))- (IFNULL(Table2.ColB, 0))) as Temp from Table1 inner join Table2 on Table1.ID = Table2.ID

您的
RDBMS
是什么?您可以使用
ISNULL
(MS SQL)、
NVL
(Oracle)、
IFNULL
(我的SQL)或
COALESCE
(Postgre和其他),这取决于您的
RDBMS
@Farhęg,COALESCE对您提到的每一个都可用。@GolezTrol是的,我已经提到过了