case...when...和MySql、Oracle、SqlServer 处理空值

71 篇文章 0 订阅
22 篇文章 0 订阅

1Case具有两种格式,简单Case函数和Case搜索函数。

  1. --简单Case函数

  2. CASE sex

  3. WHEN '1' THEN '男'

  4. WHEN '2' THEN '女'

  5. ELSE '其他' END

  6. --Case搜索函数

  7. CASE WHEN sex = '1' THEN '男'

  8. WHEN sex = '2' THEN '女'

  9. ELSE '其他' END

2、判断某字段是否为null,和判断是否为字符或数字时的写法不一样,如果不注意,很容易搞错

  1. --错误方法:

  2. CASE columnName WHEN null THEN 0 ELSE columnName END

  3.  
  4. --正确方法:

  5. CASE WHEN columnName is null THEN 0 ELSE columnName END

3、MYSQL IFNULL(expr1,expr2)          
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。

  1. mysql> select IFNULL(1,0);

  2. -> 1

  3. mysql> select IFNULL(0,10);

  4. -> 0

  5. mysql> select IFNULL(1/0,10);

  6. -> 10

  7. mysql> select IFNULL(1/0,yes);

  8. -> yes

    IF(expr1,expr2,expr3)          
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。

  1. mysql> select IF(1>2,2,3);

  2. -> 3

  3. mysql> select IF(1<2,yes,no);

  4. -> yes

expr1作为整数值被计算,它意味着如果你正在测试浮点或字符串值,你应该使用一个比较操作来做。

  1. mysql> select IF(0.1,1,0);

  2. -> 0

  3. mysql> select IF(0.1<>0,1,0);

  4. -> 1

在上面的第一种情况中,IF(0.1)返回0,因为0.1被变换到整数值, 导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。 

4、用于处理 NULL 值的函数

      MySQL  -  IFNULL() 函数

      Oracle   -  NVL() 函数

      SqlServer  -  ISNULL()函数

5、Oracle中函数NVL,NVL2,NULLIF,COALESCE    

     NVL函数的格式如下:NVL(expr1,expr2)

含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。

     NVL2函数的格式如下:NVL2(expr1,expr2, expr3)

含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。

    NULLIF函数的格式如下:NULLIF(exp1,expr2)

含义是:如果exp1和exp2相等则返回空(NULL),否则返回第一个值。 

    Coalesce函数格式如下:Coalesce(expr1, expr2, expr3….. exprn)

含义是:指定多个表达式的占位符,所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
返回表达式中第一个非空表达式,如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。

6、SqlServer函数ISNULL()

    ISNULL ( check_expression , replacement_value )

含义是:如果 check_expression 不为 NULL,则返回它的值;否则,在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同)后,则返回前者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值