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 |