CASE WHEN {condition} THEN {result}
[WHEN...THEN...]
ELSE {result}
END
WHEN{condition}是一个返回布尔类型的表达式
需要特别注意的是,当WHEN被匹配后会直接执行当WHEN对应的THEN,后续的WHEN就会被舍弃。
CASE WHEN的SQL有两种写法,下方直接以实例进行说明:
--写法1
--WHEN后面的表达式支持AND进行多条件匹配
CASE
WHEN age > 60 THEN '老人'
WHEN age > 35 AND age <= 60 THEN '中年人'
WHEN age > 20 AND age <= 35 THEN '青年人'
WHEN age > 15 AND age <= 20 THEN '少年人'
ELSE '儿童' END
--写法2
--这是简单简单CASE格式
--仅支持字段与数据对比(即常说的等于)
--字段值与数据的数据类型必须相同或者可被隐性转换
--比如:数字类型的age可以和数字比(如本案例)
--数字类型的age可以和数字字符串字符串比(WHEN '60' THEN '60生日老人')
--而(WHEN 'abc' THEN '怪人')则会报错
CASE age
WHEN 60 THEN '60生日老人'
WHEN 40 THEN '40中年人'
WHEN 20 THEN '20青年人'
WHEN 15 THEN '15少年人'
ELSE '儿童' END
此外需要注意的是,THEN {result} 和 ELSE {result}中的{result}类型必须一致。
比如下方的语法则会出错!
--这里THEN后面既有输出字符串也有输出数字的,无法统一类型
CASE age
WHEN 60 THEN '60生日老人'
WHEN 40 THEN 10086
WHEN 20 THEN '20青年人'
WHEN 15 THEN 12345
ELSE 10010 END
CASE WHEN一般放在SELECT子句内,下方通过案例进行了解其应用。
--如果sex为1查询出男、为2查询出女、其他查询出外星人
--并将结果命名为sex_name
SELECT u.name,
CASE u.sex
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '外星人' END AS sex_name
FROM sys_user u
--CASE WHEN判空 名字为空显示指定字符串
CASE WHEN name IS NULL THEN '未知姓名' ELSE name END
--关于判空MySQL中有IFNULL(字段, 为空返回值)函数
CASE WHEN可以通过某个特定的type字段分别从不同的表中查询数据(虽然这个方式非常不效率)
--如果文章type为1从post_book表取图片
--如果文章type为2从post_tool表取图片
--否则返回默认图片
SELECT p.id, p.img,
CASE p.type
WHEN 1 THEN
(SELECT b.img FROM post_book b WHERE b.pid = p.id)
WHEN 2 THEN
(SELECT t.img FROM post_tool t WHERE t.pid = p.id)
ELSE '/normalImg.png'
END AS logo
FROM post p
当前还没有观点发布,欢迎您留下足迹!
很多运维人员习惯采用默认安装的方式安装Oracle数据库,而Oracle日志默认放置在/opt目录下,绝大多数Linux环境的大磁盘往往挂载在/home,因此经常会出现磁盘空间不足的情况,采用本文配置可指定并迁移日志
Linux系统下的Oracle数据库实用常用的维护命令整理,本文内容偏向运维,主要包含:基础启动重启、表空间维护、数据库角色与用户维护、字符集配置等,并给出各类场景的实例语句
登录Oracle报错 ORA-00257: archiver error. Connect internal only, until freed. 由于归档日志(archive log)已满引起的。
存储过程是个好东西,WEB工程在架构阶段会设计很多存储过程,后续在架构中开发需求的时候,反而会直接写SQL完成各项诉求。所以说,这玩意儿略微有那么一点点伪高端。
Oracle 9i版本引入MERGE INTO语句,其主要用于实现条件入库能力,用于解决对于已有数据更新升级的情况,即可实现不存在数据则插入,存在数据则更新的分支判断形式的更新能力
对于数据库而言,多表连接操作可以算的上是基本操作,在 MongoDB 通过 $lookup 聚合查询可以实现多表左连接查询,在后续的版本中 $lookup 得到了一系列的增强,实现更为复杂的关联查询