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>b,1,2),如果确实a>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(金额>0, 1,0)) as num from 费用</p>
<p>
MS SQL写法:select sum(case when 金额>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 <p>你好</p> 2010-05-07 0:00:00<br>
15 NULL</p>
<p>
我不想要上面的结果,我想要下面这个结果:</p>
<p>
ID bzh zynr fbrq<br>
13 001 <p>你好</p> 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> </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 <= 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]