sql求和涉及到null值
2015-09-16 16:21
453 查看
SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
请看下面的 "Products" 表:P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | computer | 699 | 25 | 15 |
2 | printer | 365 | 36 | |
3 | telephone | 280 | 159 | 57 |
我们使用如下 SELECT 语句:
SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder) FROM Products
在上面的例子中,如果有 "UnitsOnOrder" 值是 NULL,那么结果是 NULL。
微软的 ISNULL() 函数用于规定如何处理 NULL 值。
NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果。
在这里,我们希望 NULL 值为 0。
下面,如果 "UnitsOnOrder" 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回 0。
SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0)) FROM Products
Oracle
Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0)) FROM Products
MySQL
MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) FROM Products
或者我们可以使用 COALESCE() 函数,就像这样:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0)) FROM Products
相关文章推荐
- mysql使用update多表多字段更新
- mysql导入导出备份与恢复
- sql点滴44—mysql忘记root密码
- phpredis Floating point exception
- 使用SQLAzureMW进行迁移
- memcached基本配置与使用
- SQL中Merge用法详解
- MySQL---外键的用法
- oracle存储过程如何返回list,并用jdbc调用
- MysqlL-5.6免安装版配置方法
- SQLAlchemy---数据库查询
- 安装sql server2005提示0x7814018e指令应用的0x00000643内存不可read
- oracle存储过程
- mysql 自定义方法创建 问题总结
- Magento模块升级修改数据库表结构
- oracle修改密码永不过期(默认180天过期)
- 一个sql例子,分组,查询,统计等操作,老忘记,记录一下
- Oracle查询补全
- 数据库单元测试的一点尝试
- Oracle数据库异机升级