法之魄 發表於 2023-9-21 00:00:00

sql学习之CASE WHEN THEN ELSE END的用法

<p>
        超强:SQL命令中的case...when...then...else...end条件查询(不同于where) 与 类型转换的用法</p>
<p>
        case...when...then...else...end,是在from前面,可以改变记录中某字段的值,不能决定是否显示该记录;</p>
<p>
        where,是在from后面,不可以改变记录中某字段的值,但可以决定是否显示该记录。</p>
<p>
        case...when...then...else...end,可用于对同一记录的多个字段求和,带分支判断。</p>
<p>
        另外,对字段判断和处理,往往需要强制类型转换。</p>
<p>
        select to_number('19f','xxx') from dual; --八进制<br>
        得到  415<br>
        select to_number('f','xx') from dual; --十六进制<br>
        得到  15</p>
<p>
        select to_number('123')  from dual; --十进制<br>
        得到  123</p>
<p>
        与date操作关系最大的就是两个转换函数:to_date(),to_char()<br>
        to_date() 作用将字符类型按一定格式转化为日期类型:<br>
        具体用法:to_date('2004-11-27','yyyy-mm-dd'),<br>
        前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。如to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 将得到具体的时间</p>
<p>
        字符串处理函数:</p>
<p>
        select to_number(SUBSTR(rain_1,0,2),'xx')  from obs</p>
<p>
        <strong>(一)Access 数据库</strong></p>
<p>
        大家知道在access中有iif函数,能将一个判断赋值序列简化成一个表达式,比如<br>
        iif(a&gt;b,1,2),如果确实a&gt;b那么结果给出1,否则就是2。这实在很方便。</p>
<p>
        示例<br>
        (1)数字<br>
        如果 Measures.CurrentMember 是空单元,则下面的示例返回 0,否则返回 1<br>
        IIf(IsEmpty(Measures.CurrentMember), 0, 1)</p>
<p>
        (2)字符串<br>
        如果Measures.CurrentMember 是空单元,则下面的字符串返回字符串"Yes",否则返回字符串"No"<br>
        IIf(IsEmpty(Measures.CurrentMember), "Yes", "No")</p>
<p>
        在Access中我可以用IIF函数进行统计汇总,比如,要知道实际应该交费的用户个数<br>
        Access写法:Select sum(iif(金额&gt;0, 1,0)) as num from 费用</p>
<p>
        MS SQL写法:select sum(case when 金额&gt;0 then 1 else 0 end) as num from 费用</p>
<p>
        <strong>(二)Ms SQL 数据库</strong></p>
<p>
        IIF在SQL中是 case when ....then ...else...  end</p>
<p>
        例:select id,case when bz='1' then xx when bz='2' then yy else zz end as tt from xxx</p>
<p>
        这里我举个例子,有一个表政策法规表(policy_fgxx),有ID(主键)、bzh(标准号)、zynr(主要内容)、</p>
<p>
        fbrq(发布日期)四个字段</p>
<p>
        Select * From policy_fgxx 结果:</p>
<p>
        ID bzh zynr fbrq<br>
        13 001 &lt;p&gt;你好&lt;/p&gt; 2010-05-07 0:00:00<br>
        15 NULL</p>
<p>
        我不想要上面的结果,我想要下面这个结果:</p>
<p>
        ID bzh zynr fbrq<br>
        13 001 &lt;p&gt;你好&lt;/p&gt; 2010-05-07 0:00:00<br>
        15 无 1990-06-06 0:00:00</p>
<p>
        也就是说,标准号为空的时候我想让它显示空,发布日期为null的时候我想让它显示我指定的日期</p>
<p>
        <strong>下面我给出写法,大家可以自己思考</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_40356">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">Select</code> <code class="sql plain">id,zynr,</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql plain">(</code><code class="sql color2">case</code> <code class="sql keyword">when</code> <code class="sql plain">bzh=</code><code class="sql string">''</code> <code class="sql keyword">then</code> <code class="sql string">'无'</code> <code class="sql keyword">else</code> <code class="sql plain">bzh </code><code class="sql keyword">end</code><code class="sql plain">) </code><code class="sql keyword">AS</code> <code class="sql plain">bzh,</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql plain">(</code><code class="sql color2">case</code> <code class="sql keyword">when</code> <code class="sql plain">fbrq </code><code class="sql keyword">is</code> <code class="sql color1">null</code> <code class="sql keyword">then</code> <code class="sql string">'1982-06-02'</code> <code class="sql keyword">else</code> <code class="sql plain">fbrq </code><code class="sql keyword">end</code><code class="sql plain">) </code><code class="sql keyword">AS</code> <code class="sql plain">fbrq </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="sql keyword">From</code> <code class="sql plain">policy_fgxx</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>sqlite case when then else end </strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_598473">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql plain">sqlite&gt; </code><code class="sql keyword">select</code> <code class="sql plain">datetime(CreateTime, </code><code class="sql string">'unixepoch'</code><code class="sql plain">, </code><code class="sql string">'localtime'</code><code class="sql plain">) 时间,Message 内容,</code><code class="sql color2">case</code> <code class="sql plain">Des </code><code class="sql keyword">when</code> <code class="sql plain">0 </code><code class="sql keyword">then</code> <code class="sql string">'乐'</code> <code class="sql keyword">else</code> <code class="sql string">'园'</code> <code class="sql keyword">end</code> <code class="sql plain">名称</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">from</code> <code class="sql plain">Chat_af863d30e1c1e5eba27a0df37a75dba0 </code><code class="sql keyword">where</code> <code class="sql plain">rowid &lt;= 2;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql plain">+</code><code class="sql comments">---------------------+----------+------+</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="sql plain">| 时间        | 内容   | 名称 |</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="sql plain">+</code><code class="sql comments">---------------------+----------+------+</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="sql plain">| 2013-08-22 18:54:13 | 网络不好 | 园  |</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="sql plain">| 2013-08-22 20:19:07 | 乔乐   | 园  |</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="sql plain">+</code><code class="sql comments">---------------------+----------+------+</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="sql plain">2 </code><code class="sql keyword">rows</code> <code class="sql color1">in</code> <code class="sql keyword">set</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>其它网友的实例:</strong></p>
<p>
         Id     name        dept<br>
        1        aa          dept1<br>
        2        bb          dept1<br>
        3        cc           dept2</p>
<p>
        SELECT SUM(CASE decp WHEN 'decp1' THEN 1 ELSE 0 end ) AS decp1,<br>
        sum(case decp when 'decp2'then 1 else 0 end)as decp2<br>
        FROM teacher</p>
<p>
        生成:</p>
<p>
        dept1     dept2</p>
<p>
        2             1</p>
<p>
        这个例子主要是学习了(CASE  WHEN  THEN   ELSE   end )语句的用法.</p>
<p>
        在我们做数据统计的时候这是一个非常有用的语句。</p>
頁: [1]
查看完整版本: sql学习之CASE WHEN THEN ELSE END的用法