SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
| SERIALNUMBER | MANUFACTURER | IMPORT_PRICE | EXPORT_PRICE |
|---|---|---|---|
| 1 | XTEP | 110.78 | 224.90 |
| 2 | 361 | 151.12 | 224.90 |
| 3 | ERKE | ||
| 4 | 157.89 | 224.00 |
EXPORT_PRICE和IMPORT_PRICE是可选的而且包含NULL值
我们算出差价:
SELECT MANUFACTURER,EXPORT_PRICE-IMPORT_PRICE FROM TROUSERS;
结果:
| MANUFACTURER | EXPORT_PRICE-IMPORT_PRICE |
|---|---|
| XTEP | 114.12 |
| 361 | 172.88 |
| ERKE | |
| 66.11 |
如果有 “EXPORT_PRICE和IMPORT_PRICE” 值是 NULL,那么结果是 NULL。
微软的 ISNULL() 函数用于规定如何处理 NULL 值。
NVL(), IFNULL() 和 COALESCE() 函数也可以达到相同的结果。
在这里,我们希望 NULL 值为 0。
如果 “IMPORT_PRICE和EXPORT_PRICE” 是 NULL,则不利于计算,因此如果值是 NULL 则 ISNULL() 返回 0。
SQL Server / MS Access
SELECT MANUFACTURER,ISNULL(EXPORT_PRICE,0)-ISNULL(IMPORT_PRICE,0) FROM TROUSERS
Oracle
Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:
SELECT MANUFACTURER,NVL(EXPORT_PRICE,0)-NVL(IMPORT_PRICE ,0) FROM TROUSERS
MySQL
MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。
在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:
SELECT MANUFACTURER,IFNULL(EXPORT_PRICE,0)-IFNULL(IMPORT_PRICE ,0) FROM TROUSERS
或者我们可以使用 COALESCE() 函数:
SELECT MANUFACTURER,COALESCE(EXPORT_PRICE,0)-COALESCE(IMPORT_PRICE ,0) FROM TROUSERS
结果集:
| MANUFACTURER | EXPORT_PRICE-IMPORT_PRICE |
|---|---|
| XTEP | 114.12 |
| 361 | 172.88 |
| ERKE | 0 |
| 66.11 |
本文介绍了在SQL中处理NULL值的不同方法,包括使用ISNULL()、NVL()、IFNULL()和COALESCE()函数来替代NULL值为0,确保在进行数值计算时不会因NULL值而导致结果为NULL。
643

被折叠的 条评论
为什么被折叠?



