• SQL语句中case函数


      case函数,严格的意义上来讲case函数已经试流程控制语句了,不是简单意义上的函数,不过为了方便,很多人将case函数称为流程控制函数。

    case函数的一般有两种用法:1.case expression

                    when value1 then returnvalue1

                    when value2 then returnvalue2

                    when value3 then returnvalue3

                    else   defaultvalue

                    end

                                                 上述的第一种用法就是:case函数对表达式expression进行测试,如果expression等于value1则返回returnvalue1.依次类推如果不符合条件的所有的when条件,就返回默认值defaultvalue。

    可见case函数跟普通的switch   case语句非常类似,使用case函数我们可以实现复杂的业务逻辑,下面的sql语句就是就是用来判断是好孩子,我们偏爱tom所以我们认为他是好孩子,jack是坏孩子,其他的都是普通孩子

    select fname, (

    case fname

    when 'tom' then '好孩子'

    when 'jack' then '坏孩子'

    else '普通孩子'

    end

    ) as isgoodchild

    from T_person

    2:case函数在做报表的时候非常有用,比如T_customer表中的flevel字段是整数类型,它记录着客户的级别,如果是1是VIP用户,如果是2就是高级用户,如果是3就是普通用户,在制作报表的时候不应该把1,2,3这样的数字显示在报表中而应该显示它的文字,这里就可以用case函数来实现

    select fname,

    (

      case flevel

      when 1 then 'VIP客户'

      when 2 then '高级客户'

      when 3 then '普通客户'

      else '客户类型错误'

      end

    ) as flevelName

    from T_customer

    用法二:

    上面的case用法只能用来实现简单的等于的逻辑判断,要实现“如果年龄小于18则返回未成年人”否则返回“成年人”是无法完成的,这就是需要case的第二种用法了。

    case 

    when condition1 then returnvalue1

    when condition2 then returnvalue2

    when condition3 then returnvalue3

    else   defaultvalue

    end

    解释:condition1,condition2,condition3为条件表达式。case函数对各个表达式从前向后进行测试。如果条件1为真的时候就返回条件1对应的值returnvalue1,否则如果condition2为真的时候就返回returnvalue2........以此类推 如果都不符合条件就返回默认值defaultvalue.这种用法没有只能对一个表达式进行判断,因此使用起来更加灵活,比如下面的sql语句判断一个人的体重是不是正常,如果体重大于50偏重,小于40偏轻,介于40到50之间正常。

    select

    fname,fweight,(

    case

    when fweight <40 then 'thin'

    when fweight > 50 then 'fat'

    else 'ok'

    end

    ) as isnormal

    from T_person.

  • 相关阅读:
    改造MFC程序,使原来不支持winsocket的工程支持winsocket
    算术移位和逻辑移位实现分析
    MFC 编辑框中字体大小改变,行高不能改变,只能显示一半的问题,已解决。
    在MFC中,使用控制台Console输出调试信息
    在MFC中使用GDI+的一般方法,以VC6.0编译器为例
    WinForm 实现主程序(exe)与其关联类库(*.dll)分开存放
    Deserializing/Serializing SOAP Messages in C#
    List分页
    ConvertJavaMiliSecondToDateTime
    中文数字大小写转阿拉伯数字
  • 原文地址:https://www.cnblogs.com/airycode/p/5283509.html
Copyright © 2020-2023  润新知