oralce的判断语句

2023-11-18

大家对 IF ELSE 语句应该都很熟悉吧,它是用来对过程进行控制的。在 SQL 的世界中 CASE 语句有类似的效果。下面简单的介绍 CASE 语句的用法。

CASE 语句的形式

事实上,CASE 语句有两种形式

 1 SELECT  
 2     -- 简单 CASE 语句(Simple CASE)  
 3     CASE GENDER    
 4         WHEN 1 THEN ''    
 5         ELSE ''    
 6     END AS GENDER,  
 7   
 8     -- 查询 CASE 语句(Searched CASE)  
 9     CASE     
10         WHEN GENDER = 1 THEN ''    
11         ELSE ''    
12     END AS GENDER  
13       
14 FROM USER_INFO;  

 

注意点: 

1、以CASE开头,以END结尾 
2、分支中WHEN 后跟条件,THEN为显示结果 
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加 
4、END 后跟别名 

 

考虑下面的情况,假设有个 USER_INFO 表,定义如下:

1 CREATE TABLE USER_INFO  
2 (  
3     NAME        VARCHAR2(20) NOT NULL,  ---姓名  
4     GENDER      NUMBER(1,0),            ---性别(1、男   2、女)  
5     BIRTHDAY    DATE                    ---生日  
6 );  
7   
8 INSERT INTO USER_INFO VALUES ('张三', 1, DATE '2014-12-27');  
9 INSERT INTO USER_INFO VALUES ('李四', 2, DATE '2014-12-27'); 

CASE使用案例 1

把 USER_INFO 表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:

1 SELECT   
2     NAME,  
3     CASE GENDER  
4         WHEN 1 THEN ''  
5         ELSE ''  
6     END AS GENDER,  
7     BIRTHDAY  
8 FROM USER_INFO;

CASE使用案例 2

假设 USER_INFO 目前没有值,然后你往 USER_INFO 导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?

 

方法1:使用三条语句,先把2更新成3,接着把1更新成2,最后把3更新成1,是不是很麻烦?

1 UPDATE USER_INFO SET GENDER=3 WHERE GENDER=2;  
2 UPDATE USER_INFO SET GENDER=1 WHERE GENDER=3;  
3 UPDATE USER_INFO SET GENDER=2 WHERE GENDER=1; 

方法2:使用CASE语句

1 UPDATE USER_INFO SET GENDER=  
2 (  
3   CASE GENDER  
4     WHEN 1 THEN 2  
5     WHEN 2 THEN 1  
6     ELSE GENDER  
7   END  
8 );

DECODE 函数

此外, Oracle 还提供了一个函数来达到和 CASE 语句相同的效果。

1 SELECT DECODE(GENDER, 1, '', 2, '', '未知') FROM USER_INFO;  
1 DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。 

 

If/Else功能实现的3种写法

 1 一、单个IF
 2 1 3 
 4 if a=...  then
 5 .........
 6 end if;
 7 
 8 2 9 
10 if a=... then
11 ......
12 else
13 ....
14 end if;
15 
16 二、多个IF
17 
18 if a=..  then
19 ......
20 elsif a=..  then
21 ....
22 end if;     
23 这里中间是“ELSIF”,而不是ELSE IF 。这里需要特别注意

 

 

 

 

转载于:https://www.cnblogs.com/qianyuliang/p/6729183.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oralce的判断语句 的相关文章

  • upload-labs靶场第一关——第九关

    Pass 01JS检测绕过 1 根据提示 从上述代码中可以看出 上述代码使用了JavaScript脚本 在前端对用户上传文件的类型进行了检测 因此 我们只需要先上传符合JavaScript脚本要求的数据包 然后使用Burpsuit抓取该数据
  • python+Appium自动化:python多线程多并发启动appium服务

    Python启动Appium 服务 使用Dos命令或者bat批处理来手动启动appium服务 启动效率低下 如何将启动Appium服务也实现自动化呢 这里需要使用subprocess模块 该模块可以创建新的进程 并且连接到进程的输入 输出

随机推荐

  • 数据可视化第五章

    基于python的散点图实现 py import ggplot as gp import pandas as pd crime pd read csv crimeRatesByState2005 csv plot gp ggplot gp
  • 有点钱怎么做副业?应该投资哪些副业?

    有点钱怎么做副业 应该投资哪些副业 现在很多上班族 失业族 甚至连带孩子的妈妈们 他们不满足现状 给自己寻找赚钱的机会 一个是为了丰富自己的业余生活 再个就是能更加充实自己的钱包 让自己更为独立 也能自主 现在有哪些小途径可以实现轻松赚钱呢
  • Lua中的定时器

    Lua定时器 Cocos2d x C 中的定时器网上有很多 也很容易找 所以我就不写了 直接Lua吧 在Lua中用定时器的地方很多 我是深有体会啊 比如说我们需要一个函数每帧都执行 那么就可以用定时器来解决啦 旁白 好哇 好哇 终于可以解决
  • 搭建域控和添加本域辅域控,加入域(上)(精准扶小白)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 安装环境 操作系统 Windows2012 一 什么是工作组 域 活动目录 树 林 工作组 处在同一个局域网中的用户 他们也默认处于同一个工作组 且加入工作组不需要信任过程
  • [PYTHON与CSP的姻缘]2023-3 LDAP

    练习过程 一开始一直以为set输出数字的时候是有序的 扣了一天一直显示错误 不知道哪跟哪 大冤种无语了 然后改了输出直接满分 无语ing 主要注意要考虑到表达式的一些嵌套 这样就可以参考题干中对语句的递归定义来写 用递归进行对表达式的切分处
  • react有哪些性能优化的手段?

    1 使用组件shouldComponentUpdate方法 通过在组件爱你中实现shouldComponentUpdate方法 可以手动控制组件的更新 在该方法中 可以根据组件的属性和状态进行比较 判断是否需要进行更新 避免不必要的更新可以
  • 539. Minimum Time Difference

    Given a list of 24 hour clock time points in Hour Minutes format find the minimum minutes difference between any two tim
  • 数据库几种删除的区别delete,truncate,drop

    delete from 表名 where 条件 gt 删除满足条件的记录 delete from test where id 1 delete from test gt 删除所有 commit gt 提交数据 rollback gt 回滚数
  • Java面试题大全(2021版)

    发现网上很多Java面试题都没有答案 所以花了很长时间搜集整理出来了这套Java面试题大全 希望对大家有帮助哈 本套Java面试题大全 全的不能再全 哈哈 博主已将以下这些面试题整理成了一个Java面试手册 是PDF版的 关注博主的微信公众
  • 用递归进行数组求和

    记录一下zj提前批算法一面 用递归进行数组求和 算法马上就写出来了 但是运行的时候一直报栈溢出 我以为是我的递归逻辑出问题了 就一直在改 但是还是报错 最终卡住了 开局就GG 自己也慌得一批 导致我第二道题也没做出来 最初写的代码如下 au
  • Nginx 负载均衡模块 ngx_http_upstream_module 详述

    译序 截至发稿时止 官方最新 ngx http upstream module 指令详述 官方随时在更新 请及时关注官网最新公布 以下是官方原文 ngx http upstream module 模块用于定义可以被 proxy pass f
  • GBase 8a 问题处理-集群管理节点无法正常启动

    问题版本 GBase 8a V8 6 2 43 R20 问题简述 在进行迁移工作的数据导入之后 启动集群所有管理节点一直不能正常启动 通过命令service gcware stop 也不能停止 报错信息 gcadmin 报错 Could n
  • MySQL索引优化(超详细)

    Mysql索引优化 1 索引介绍 1 1 什么时MySQL的索引 MySQL官方对于索引的定义 索引是帮助MySQL高效获取数据的数据结构 MySQL在存储数据之外 数据库系统中还维护着满足特定查找算法的数据结构 这些数据结构以某种引用 指
  • CSDN竞赛-第六期

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 前言 背景 不知不觉 CSDN编程竞赛已经进行六期了 从我知道有这个竞赛的时候已经进行了两期 所以我是从第三期开始的 期间参与过三次 成绩在
  • 4,引擎初始化--(4)加载地图--2,创建world(学习资料来源于UE4游戏框架)

    加载地图时 创建完默认GameMode 就要创建world了 首先读取到package 创建world 从这里可以看到 地图是可以在初始化建立的 GameInstance是在运行起来后建立 两者是独立的 设为当前World 并设定为全局GW
  • leetcode:1905. 统计子岛屿

    题目来源 leetcode 1905 统计子岛屿 题目描述 class Solution public int countSubIslands vector
  • 漏洞情报

    点击上方 订阅话题 第一时间了解漏洞威胁 0x01 漏洞描述 WordPress ProfilePress 原 WP User Avatar 是一个轻量级会员插件 可用于创建用户画像 会员目录和用于用户注册 登录 密码重置及用户信息编辑的前
  • C++57个入门知识点_40 常成员函数(用于定义不可修改类内部成员变量的函数,一般用来修饰Get函数;常成员函数this指针:const T* const;常成员函数内部变量修改方法:强转/关键字)

    前面我们已经学习了C 中重要的知识点 特别是虚函数可能会有些懵逼 但是需要我们在实践中不断的理解和尝试 写代码是进步最快的方式 接下来将会介绍一些简单但很重要的知识点 本篇介绍常成员函数 总结 1 常成员函数 用于在程序中定义不可修改内部成
  • 关于红楼梦Python文本分析

    1 获取小说文本 读取文件 获取小说文本 读取文件 fn open prepare 红楼梦 曹雪芹 txt encoding utf 8 string data fn read 读出整个文件 fn close 关闭文件 2 对文本进行处理
  • oralce的判断语句

    大家对 IF ELSE 语句应该都很熟悉吧 它是用来对过程进行控制的 在 SQL 的世界中 CASE 语句有类似的效果 下面简单的介绍 CASE 语句的用法 CASE 语句的形式 事实上 CASE 语句有两种形式 1 SELECT 2 简单