DECODE 函数和 CASE-WHEN 表达式的比较
在 SQL 中我们通常认为以下两种写法是等价的:
DECODE(PARAM, VALUE1, RESULT1, [VALUE2, RESULT2, ...] DEFAULT_RESULT)
CASE PARAM WHEN VALUE1 THEN RESULT1 [WHEN VALUE2 THEN RESULT2 ...] ELSE DEFAULT_RESULT END
- 虽然一个叫函数,一个叫表达式,但实际上二者都在行为上都很像 IF-ELSIF-ELSE 流程控制语句,会按书写顺序执行判断,遇到符合条件的情况则返回相应的值,后面的情况涉及到的语句不会被执行(例如开销较大的函数);
- 都可以省略默认值的(CASE 省略默认值的方式是不写 ELSE 子句),如果省略默认值但又未找到匹配则返回 NULL;
- 都可以在 SQL 中任何需要“值”的地方使用;
实际上 DECODE 和 CASE-WHEN 还是有一些差别的,我把自己知道的列在了下面,欢迎读者补充!
DECODE | CASE-WHEN | |
适用数据库 | Oracle 专属 | SQL 标准 |
可用于 PL/SQL | 否 | 是 |
特殊匹配逻辑 | NULL 可与 NULL 匹配 (通常情况下 NULL 不会与任何值相等,只能用 IS NULL 判断) | 如 CASE 后没有表达式 可在 WHEN 和 THEN 中填写任意条件表达式 |
返回值类型不同时 | 某个返回值在语句执行中实际返回时, 向第一个返回值的类型隐式转换 | 所有返回值在语句解析时, 与第一个返回值类型保持一致 |
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
看了很多文章,就这篇说明白了什么是接口测试(含视频教程)
接口(API)是一个简称,全名叫应用程序编程接口(Application Programming Interface),是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 工作中的接口如打电话的按键,电梯中的楼层按键,开车时脚踩油门,接口就是一个位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节,我们今天要讲的Web API就是这么一类东西。 例如百度搜索,它提供了搜索接口,简化了你的搜索任务 越底层发现bug,它的修复成本是越低的,接口属于金字塔模型 的中间层,属于收益产出比最高的 金字塔模型 前端随便变,接口测好了,后端不用变 检查系统的安全性,稳定性 系统复杂度上升,传统测试方法成本加大,效率降低,接口可以 解决这个问题 前后端框架分离,从安全层面说 只依赖前端进行验证已经不能满足安全的需求,因为绕过前 端太容易,要对接口做控制,做相应的校验 前后端传输,日志打印等信息是否加密传输也是需要验证的,特别是密码,身份证,银行卡信息等。 接口测试的原理是什么呢? 测试人员可...
- 下一篇
golang-gosql 发布新版 v0.1.3,一款轻量级 Golang 操作 MySQL 的类库
v0.1.3版本更新: 修复一个排序bug 调整优化实现,减少内部复杂度 gosql 是一款开源的 操作mysql类库, 支持用golang方式书写复杂sql。 特有的风格写法 支持嵌套的复杂sql 支持读写分离 支持延时链接 结构映射 事务支持 多数据库实例 用例即文档 条件插件机制 代码方便,实现 87% 的测试覆盖 试图提供优质的代码供开发者使用 其sql 构建库可单独使用 实现自行构建复杂sql 如: s := gosql.NewSQLSegment() s.Flag("DISTINCT") s.Field("*") s.Table("tbl1.t1") s.Where("t1.status", "0") s.Where("name", "jack") s.Where("[!=]nick", "tom") s.Where("[in]role1", []string{"1", "2", "3", "4"}) s.Where("[!in]role2", []string{"1", "2", "3", "4"}) s.Where("[in]card1", 1) ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果