- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章sql学习之CASE WHEN THEN ELSE END的用法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
超强:SQL命令中的case...when...then...else...end条件查询(不同于where) 与 类型转换的用法 。
case...when...then...else...end,是在from前面,可以改变记录中某字段的值,不能决定是否显示该记录; 。
where,是在from后面,不可以改变记录中某字段的值,但可以决定是否显示该记录.
case...when...then...else...end,可用于对同一记录的多个字段求和,带分支判断.
另外,对字段判断和处理,往往需要强制类型转换.
select to_number('19f','xxx') from dual; --八进制 得到 415 select to_number('f','xx') from dual; --十六进制 得到 15 。
select to_number('123') from dual; --十进制 得到 123 。
与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用将字符类型按一定格式转化为日期类型: 具体用法:to_date('2004-11-27','yyyy-mm-dd'), 前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。如to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 将得到具体的时间 。
字符串处理函数:
select to_number(SUBSTR(rain_1,0,2),'xx') from obs 。
(一)Access 数据库 。
大家知道在access中有iif函数,能将一个判断赋值序列简化成一个表达式,比如 iif(a>b,1,2),如果确实a>b那么结果给出1,否则就是2。这实在很方便.
示例 (1)数字 如果 Measures.CurrentMember 是空单元,则下面的示例返回 0,否则返回 1 IIf(IsEmpty(Measures.CurrentMember), 0, 1) 。
(2)字符串 如果Measures.CurrentMember 是空单元,则下面的字符串返回字符串"Yes",否则返回字符串"No" IIf(IsEmpty(Measures.CurrentMember), "Yes", "No") 。
在Access中我可以用IIF函数进行统计汇总,比如,要知道实际应该交费的用户个数 Access写法:Select sum(iif(金额>0, 1,0)) as num from 费用 。
MS SQL写法:select sum(case when 金额>0 then 1 else 0 end) as num from 费用 。
(二)Ms SQL 数据库 。
IIF在SQL中是 case when ....then ...else... end 。
例:select id,case when bz='1' then xx when bz='2' then yy else zz end as tt from xxx 。
这里我举个例子,有一个表政策法规表(policy_fgxx),有ID(主键)、bzh(标准号)、zynr(主要内容)、 。
fbrq(发布日期)四个字段 。
Select * From policy_fgxx 结果:
ID bzh zynr fbrq 13 001 <p>你好</p> 2010-05-07 0:00:00 15 NULL 。
我不想要上面的结果,我想要下面这个结果:
ID bzh zynr fbrq 13 001 <p>你好</p> 2010-05-07 0:00:00 15 无 1990-06-06 0:00:00 。
也就是说,标准号为空的时候我想让它显示空,发布日期为null的时候我想让它显示我指定的日期 。
下面我给出写法,大家可以自己思考 。
1
2
3
4
|
Select
id,zynr,
(
case
when
bzh=
''
then
'无'
else
bzh
end
)
AS
bzh,
(
case
when
fbrq
is
null
then
'1982-06-02'
else
fbrq
end
)
AS
fbrq
From
policy_fgxx
|
sqlite case when then else end 。
1
2
3
4
5
6
7
8
9
|
sqlite>
select
datetime(CreateTime,
'unixepoch'
,
'localtime'
) 时间,Message 内容,
case
Des
when
0
then
'乐'
else
'园'
end
名称
from
Chat_af863d30e1c1e5eba27a0df37a75dba0
where
rowid <= 2;
+
---------------------+----------+------+
| 时间 | 内容 | 名称 |
+
---------------------+----------+------+
| 2013-08-22 18:54:13 | 网络不好 | 园 |
| 2013-08-22 20:19:07 | 乔乐 | 园 |
+
---------------------+----------+------+
2
rows
in
set
|
其它网友的实例:
Id name dept 1 aa dept1 2 bb dept1 3 cc dept2 。
SELECT SUM(CASE decp WHEN 'decp1' THEN 1 ELSE 0 end ) AS decp1, sum(case decp when 'decp2'then 1 else 0 end)as decp2 FROM teacher 。
生成
dept1 dept2 。
2 1 。
这个例子主要是学习了(CASE WHEN THEN ELSE end )语句的用法. 。
在我们做数据统计的时候这是一个非常有用的语句.
最后此篇关于sql学习之CASE WHEN THEN ELSE END的用法的文章就讲到这里了,如果你想了解更多关于sql学习之CASE WHEN THEN ELSE END的用法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!