您当前的位置: 首页 >  sql

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

qq_34412985 发布时间:2020-09-11 14:04:46 ,浏览量:0

1、Case具有两种格式,简单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(expr10且expr1NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。

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

  2. -> 3

  3. mysql> select IF(1 yes

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

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

  2. -> 0

  3. mysql> select IF(0.10,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 的类型(如果这两个类型不同)后,则返回前者。

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

1.6980s