[关闭]
@lumincinta 2017-01-25T10:34:53.000000Z 字数 895 阅读 320

将null值转化为其他值

DB2 SQL


我个人认为数据库中不应该有null值,因为他颠覆了二值逻辑结构(即:真和假),出现了三值逻辑结构(即:真、假和未知)。由于null,我们的SQL语句很有可能出现意想不到的结果。此外null值和其他值进行数值运算的时候也会带来问题。但是,有时候有些事情并不是我们能够控制和改变的,作为一名真正的SQL开发者,应该敢于面对最垃圾的数据库设计。下面给大家介绍如何将null值转化为其他值。

有两个函数可以将null值转化为其它值:VALUECOALESCE,它们的使用方法和作用完全相同。

语法: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,否则的话不变。  

考虑下面的情况:

  1. CREATE TABLE
  2. USER
  3. (
  4. NAME VARCHAR(20) NOT NULL,---姓名
  5. SALARY1 FLOAT,---基本工资
  6. SALARY2 FLOAT---奖金
  7. );

假设你要查找总工资(基本工资+奖金)大于3000元的员工,我们很自然的会写出下面的语句:

  1. SELECT
  2. NAME
  3. FROM
  4. USER
  5. WHERE
  6. SALARY1+SALARY2>3000;

但是很不幸,这条语句并不是永远正确,当SALARY1或SALARY2有一个值是null的时候,我们很可能会漏掉部分数据(会漏掉哪些数据呢?朋友们自己思考一下),这就是我认为数据库中不应该有null值的原因,如果你不是决策者,无法改变数据库设计,我们可以这样写:

  1. SELECT
  2. NAME
  3. FROM
  4. USER
  5. WHERE
  6. COALESCE(SALARY1,0)+COALESCE(SALARY2,0)>3000;

  1. SELECT
  2. NAME
  3. FROM
  4. USER
  5. WHERE
  6. VALUE(SALARY1,0)+COALESCE(SALARY2,0)>3000;

这样就可以保证查询出的结果就是我们想要的结果。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注