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

2025-05-25 0 65

超强:SQL命令中的casewhenthenelseend条件查询(不同于where) 与 类型转换的用法

casewhenthenelseend,是在from前面,可以改变记录中某字段的值,不能决定是否显示该记录;

where,是在from后面,不可以改变记录中某字段的值,但可以决定是否显示该记录。

casewhenthenelseend,可用于对同一记录的多个字段求和,带分支判断。

另外,对字段判断和处理,往往需要强制类型转换。

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 ….thenelse…  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 )语句的用法.

在我们做数据统计的时候这是一个非常有用的语句。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 sql学习之CASE WHEN THEN ELSE END的用法 https://www.kuaiidc.com/51770.html

相关文章

发表评论
暂无评论