手机
当前位置:查字典教程网 >编程开发 >数据库其他 >sql学习之CASE WHEN THEN ELSE END的用法
sql学习之CASE WHEN THEN ELSE END的用法
摘要:超强:SQL命令中的case...when...then...else...end条件查询(不同于where)与类型转换的用法case......

超强: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的时候我想让它显示我指定的日期

下面我给出写法,大家可以自己思考

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

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 Union和Union All的使用方法

ADO,OLEDB,ODBC,DAO,RDO的区别说明

在PostgreSQL上安装并使用扩展模块的教程

数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)

SQL 注入式攻击的本质

数据库查询中遭遇特殊字符导致问题的解决方法

未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序错误的解决方法

sql语句中where 1=1的作用

精品推荐
分类导航