• Mysql函数----控制流函数介绍


    MySQL有4个函数用来进行条件操作的,可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。
     
    MySQL控制流函数:
    1.CASE WHEN[test1] THEN [result1]...ELSE [default] END  如果testN是真,则返回resultN,否则返回default;
    2.CASE [test] WHEN[val1] THEN [result]...ELSE [default]END  如果test和valN相等,则返回resultN,否则返回default;
    3.IF(test,t,f)  如果test是真,返回t;否则返回f;
    4.IFNULL(arg1,arg2)  如果arg1不是空,返回arg1,否则返回arg2;
    5.NULLIF(arg1,arg2)  如果arg1=arg2返回NULL;否则返回arg1;
     
    案例:
    IFNULL(),它有两个参数,并且对第一个参数进行判断。如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数。
    如:SELECT IFNULL(1,2), IFNULL(NULL,10),IFNULL(4*NULL,'false');
     
    NULLIF()函数将会检验提供的两个参数是否相等,如果相等,则返回NULL,如果不相等,就返回第一个参数。
    如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);
     
    IF()函数也可以建立一个简单的条件测试,这个函数有三个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参数,如果为假,IF()将会返回第三个参数。
    如:SELECTIF(1<10,2,3),IF(56>100,'true','false');
    SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROMUserLoginInfo;
     
    --IF()函数在只有两种可能结果时才适合使用。
    --然而,在现实世界中,我们可能发现在条件测试中会需要多个分支。在这种情况下,MySQL提供了CASE函数,它和PHP及Perl语言的switch-case条件例程一样。
     
    CASE函数的格式有些复杂,通常如下所示:
    复制代码 代码如下: 
    CASE [expression to be evaluated]
    WHEN [val 1] THEN [result 1]
    WHEN [val 2] THEN [result 2]
    WHEN [val 3] THEN [result 3]
    ......
    WHEN [val n] THEN [result n]
    ELSE [default result]
    END
    这里,第一个参数是要被判断的值或表达式,接下来的是一系列的WHEN-THEN块,每一块的第一个参数指定要比较的值,如果为真,就返回结果。所有的WHEN-THEN块将以ELSE块结束,当END结束了所有外部的CASE块时,如果前面的每一个块都不匹配就会返回ELSE块指定的默认结果。如果没有指定ELSE块,而且所有的WHEN-THEN比较都不是真,MySQL将会返回NULL。
     
    CASE函数还有另外一种句法,有时使用起来非常方便,如下:
    CASE
    复制代码 代码如下:
    CASE [expression to be evaluated]
    WHEN [conditional test 1] THEN [result 1]
    WHEN [conditional test 2] THEN [result 2]
    ELSE [default result]
    END
     
    这种条件下,返回的结果取决于相应的条件测试是否为真。
    示例:
    复制代码 代码如下:
     
    SELECT CASE 'green'
      WHEN 'red' THEN 'stop'
      WHEN 'green' THEN 'go'
    END;
     
    SELECT CASE 9
      WHEN 1 THEN 'a'
      WHEN 2 THEN 'b'
      ELSE 'N/A'
    END;
     
    SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN(2+2)<>4 THEN 'not OK' END ASSTATUS;
     
    SELECT fname,lname,(math+sci+lit) AS total,
    CASE WHEN (math+sci+lit) < 50 THEN 'D'
      WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
      WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
      ELSE 'A'
    END
    AS grade FROM marks;
  • 相关阅读:
    shell之for和if实现批量替换多目录下的文件
    问题:Linux报swap空间占用过高,但物理内存还有空余
    git常用命令汇总
    VMware下liunx虚拟机仅主机模式上网
    通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
    Linux启动过程简述
    Nginx禁止ip访问或IP网段访问方法
    解决docker主机配置了DaoCloud.io的加速后重启失败问题Failed to start Docker Application Container Engine
    Windows下用python来获取微信撤回消息
    Oracle 参数文件spfile
  • 原文地址:https://www.cnblogs.com/berandwaddle/p/11411065.html
Copyright © 2020-2023  润新知