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是的,我已经提到过了