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

我不想要上面的结果,我想要下面这个结果:

阅读剩余部分

相关阅读 >>

android 中Sqlite技术实例详解

Sqlite 常用函数 推荐

详解python中executemany和序列的使用方法

python中sqllite插入numpy数组到数据库的实现方法

nodejs中安装ghost出错的原因及解决方法

Sqlite字符串比较时的大小写问题解决方法

数据库连接池以及sequelize实现增删改查等操作指南

android实现多线程断点续传

Sqlite时间戳转时间语句(时间转时间戳)

navicat for Sqlite导入csv中文数据的方法

更多相关阅读请进入《Sqlite》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

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

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...