当前位置: 首页 > 编程笔记 >

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

颛孙国源
2023-03-14
本文向大家介绍sql学习之CASE WHEN THEN ELSE END的用法,包括了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的时候我想让它显示我指定的日期

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

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

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

 类似资料:
  • 本文向大家介绍vuex学习之Actions的用法详解,包括了vuex学习之Actions的用法详解的使用技巧和注意事项,需要的朋友参考一下 Action 类似于 mutation,不同在于: Action 提交的是 mutation,而不是直接变更状态. Action 是异步的,mutation是同步的。 沿用vuex学习---简介的案例:这里是加10 减1 1.在store.js 中 代码为:

  • 本文向大家介绍SQL语句学习,包括了SQL语句学习的使用技巧和注意事项,需要的朋友参考一下 (高手就不要笑话了^_^)。 好了,其他的不说现在就开始: select 子句主要决定了从表中取出的列名,列数以及列的显示顺序等信息,"*"表示查询所有的列,有关select的用法应该结合其它子句的用法。 1.from 子句: ①from子句用于指定被查询的表,试图或快照。 ②如果指定多个实体,用逗号讲它们

  • 在学习webpack之前,先来聊聊webpack产生背景、解决的问题以及后期学习中需要提前说好的规范 webpack产生的背景: 1、多js文件下全局对象冲突 2、模块加载顺序 3、解决模块或库的依赖 4、大工程模块过多,难以管理 webpack的作用: 1、将所有的依赖拆分成块且按需加载 2、首屏加载耗时少 3、所有的静态文件都是一个模块(css和图片等静态文件) 4、第三方库也可以作为一个模块

  • 教您一些 React 的基础知识。通过这套教程,您可以用纯 React 构建一个真正可用的应用程序,而不需要去理会其他复杂的工具。

  • Qt 是一个著名的 C++ 库——或许并不能说这只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI。使用 Qt,在一定程序上你获得的是一个“一站式”的服务:不再需要研究 STL,不再需要 C++ 的string,因为Qt有它自己的 QString 等等。或许这样说很偏激,但 Qt 确实是一个“伟大的 C++ 库”。

  • 本文向大家介绍MS SQL Server游标(CURSOR)的学习使用,包括了MS SQL Server游标(CURSOR)的学习使用的使用技巧和注意事项,需要的朋友参考一下 说实的,使用MS SQL Server这样久,游标一直没有使用过。以前实现相似的功能,都是使用WHILE循环加临时表来实现。刚才有参考网上示例练习写了一下。了解到游标概念与语法。 下面代码示例中, 先是宣告你在游标中需使用变