将null值转化为其他值
标签(空格分隔): DB2 SQL
我个人认为数据库中不应该有null值,因为他颠覆了二值逻辑结构(即:真和假),出现了三值逻辑结构(即:真、假和未知)。由于null,我们的SQL语句很有可能出现意想不到的结果。此外null值和其他值进行数值运算的时候也会带来问题。但是,有时候有些事情并不是我们能够控制和改变的,作为一名真正的SQL开发者,应该敢于面对最垃圾的数据库设计。下面给大家介绍如何将null值转化为其他值。
有两个函数可以将null值转化为其它值:VALUE、COALESCE,它们的使用方法和作用完全相同。
语法:coalesce(<field>,<target_value>)
语法:value(<field>,<target_value>)
例如:select coalesce(id,0) from <table_name>
例如:select value(id,0) from <table_name>
说明:如果id为null,则把它转化为0,否则的话不变。
考虑下面的情况:
CREATE TABLE
USER
(
NAME VARCHAR(20) NOT NULL,---姓名
SALARY1 FLOAT,---基本工资
SALARY2 FLOAT---奖金
);
假设你要查找总工资(基本工资+奖金)大于3000元的员工,我们很自然的会写出下面的语句:
SELECT
NAME
FROM
USER
WHERE
SALARY1+SALARY2>3000;
但是很不幸,这条语句并不是永远正确,当SALARY1或SALARY2有一个值是null的时候,我们很可能会漏掉部分数据(会漏掉哪些数据呢?朋友们自己思考一下),这就是我认为数据库中不应该有null值的原因,如果你不是决策者,无法改变数据库设计,我们可以这样写:
SELECT
NAME
FROM
USER
WHERE
COALESCE(SALARY1,0)+COALESCE(SALARY2,0)>3000;
或
SELECT
NAME
FROM
USER
WHERE
VALUE(SALARY1,0)+COALESCE(SALARY2,0)>3000;
这样就可以保证查询出的结果就是我们想要的结果。