Oracle:decode 函数

Oracle数据库decode函数报错(ORA-01722: invalid number) 在工作过程中,跑批处理的时候数据库报了一个错,ORA-01722: invalid number(无效数字) 经过检查发现是在查询decode函数时报错,将报错的代码单独拿出来 最后发现原来是decode函数中值的类型不同导致的。 先看一下decode函数的含义: decode函数语法: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 含义: ... 阅读详情

一、简述

DECODE 函数是 ORACLE PL/SQL 的功能强大的函数之一,目前还只有 ORACLE 公司的 SQL 提供了此函数,其它数据库厂商的 SQL 实现还没有此功能。DECODE 有什么用途呢?
先构造一个例子,假设想给职员加工资,其标准是:工资在 8000 元以下的加 20%;工资在 8000 元或以上的加 15%,通常的做法是,先选出记录中的工资字段值select salary into var-salary from employee然后对变量 var-salary 用 if-then-else 或 case when then else end 之类的流控制语句进行判断。 如果用 DECODE 函数,那么就可以把这些流控制语句省略,通过 SQL 语句就可以直接完成。如下:

select 
decode(sign(salary-8000),
        -1,salary*1.2,
        1,salary*1.15,
        salary*1.15) 
from employee

是不是很简洁? DECODE 的语法:DECODE(value,if1,then1,if2,then2,if3,then3,…,else),表示如果 value 等于 if1 时,DECODE 函数的结果返回 then1,……,如果不等于任何一个 if 值,则返回 else。初看一下,DECODE 只能做等于测试,但刚才也看到了,通过一些函数或计算替代 value,是可以使 DECODE 函数具备大于、小于或等于功能的。

1、比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
  例如:
  变量1=10,变量2=20
  则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
  
2、表、视图结构转化
现有一个商品销售表sale,表结构为:
  month    char(6)      --月份
  sell    number(10,2)   --月销售金额

现有数据为:
  200001  1000
  200002  1100
  200003  1200
  200004  1300
  200005  1400
  200006  1500
  200007  1600
  200101  1100
  200202  1200
  200301  1300

想要转化为以下结构的数据:

year    char(4)      --年份
  month1   number(10,2)   --1月销售金额
  month2   number(10,2)   --2月销售金额
  month3   number(10,2)   --3月销售金额
  month4   number(10,2)   --4月销售金额
  month5   number(10,2)   --5月销售金额
  month6   number(10,2)   --6月销售金额
  month7   number(10,2)   --7月销售金额
  month8   number(10,2)   --8月销售金额
  month9   number(10,2)   --9月销售金额
  month10  number(10,2)   --10月销售金额
  month11  number(10,2)   --11月销售金额
  month12  number(10,2)   --12月销售金额

结构转化的SQL语句为:

create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
  substrb(month,1,4),
  sum(decode(substrb(month,5,2),'01',sell,0)),
  sum(decode(substrb(month,5,2),'02',sell,0)),
  sum(decode(substrb(month,5,2),'03',sell,0)),
  sum(decode(substrb(month,5,2),'04',sell,0)),

补充1:
有学生成绩表student,现在要用decode函数实现以下几个功能:成绩>85,显示优秀;>70显示良好;>60及格;否则是不及格。
假设student的编号为id,成绩为score,那么:

select id,
decode(sign(score-85),  
1,'优秀',  
0,'优秀',
-1, decode(sign(score-70),
1,'良好',
0,'良好',
-1, decode(sign(score-60),
1,'及格',
0,'及格',
-1,'不及格'))) 
from student;

补充2:
Decode函数的语法结构如下:

decode (expression, search_1, result_1)
decode (expression, search_1, result_1, search_2, result_2)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)
decode (expression, search_1, result_1, default)
decode (expression, search_1, result_1, search_2, result_2, default)
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

decode 函数比较表达式和搜索字,如果匹配返回结果;如果不匹配,返回 default 值;如果未定义 default 值,则返回空值。

Oracle DECODE函数:高性能值映射与CASE WHEN替代实践 DECODE函数是Oracle数据库中专为等值映射设计的原生条件表达式,其核心原理是单次字段取值+顺序哈希匹配,区别于CASE WHEN的逐条布尔求值机制。这种轻量级参数化结构带来显著技术价值:在千万级订单表的字段编码转换、状态归类、分桶统计等场景下,可降低CPU时间10%~15%、减少逻辑读数千次/秒。它适用于Oracle生态内对性能敏感的ETL清洗、实时报表和老系统维护,尤其擅长单字段=常量的静态映射任务。本文深入解析DECODE函数、Oracle条件表达式在真实生产环境中的性能边界、隐式类型陷阱与NU 阅读详情

相关推荐

“解密Oracle中的DECODE函数:用法、示例和编程技巧“

DECODE函数根据expression的值,逐个比较search_value和expression,并返回对应的result。如果在1到10之间,则返回’Low’;如果在51到100之间,则返回’High’;在上述示例中,我们将根据job_id的值返回相应的职位标题。如果job_id为’EN’,则返回’Engineer’;如果为’MN’,则返回’Manager’;如果为’AN’,则返回’Analyst’;在上述示例中,我们将根据job_id和department_id的值返回相应的职位标题和部门名称。

TechInk的博客 336

Oracle中decode函数详解

Oracle中decode函数详解,对decode的函数格式、函数说明、使用场景进行详细讲解。

实泽有之,无泽虚之 6万+

新手必看!Cisco Packet Tracer 8.2从安装到完成第一个局域网实验(附常见问题解决)

本文为网络新手提供了Cisco Packet Tracer 8.2的完整入门指南。从官方下载安装、界面熟悉,到核心的拖拽设备、连线、配置IP地址三步操作,手把手教你完成第一个局域网组网实验。文章重点讲解了如何通过Ping命令验证连通性,并附带了连线错误、IP配置不当等常见问题的解决思路,帮助初学者快速上手这款强大的思科模拟器。

android的专栏 866

oracle中decode函数的使用

一、DECODE函数相当于if条件语句,它将输入的值与函数中的参数列比较,根据输入值返回一个对应值 1、语法:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 2、说明:当“条件”等于“值1”的时候,显示“返回值1”,等于“值2”的时候,显示“返回值2”,依次类推,如果都不满足,则显示“缺省值”即默认值。 3、逻辑:类似于以下操作 if(条件=值1){ 返回值1 }else if(条件=值2){ 返回值2 } . . . . ...

心若向阳 无谓悲伤 2万+

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

基于STM32L4XX、HAL库的RTL8201F 以太网收发器(PHY)驱动程序设计

define PHY_RESET_DELAY 1000 // PHY复位延迟(ms)#define PHY_AUTONEGO_DELAY 3000 // 自动协商延迟(ms)/* 检查PHY ID (RTL8201F的ID为0x001CC816) *//* 系统时钟配置,确保ETH有50MHz时钟 *//* 初始化CPU, AHB和APB总线时钟 */

zhusl6688的博客 801

数据库之decode函数的用法

decode函数是起一个用于判断的作用,相当于if,decode函数内的参数形式是这样的:decode(需要进行判断的值,判断值1,1对应的显示值,判断值2,2对应的显示值) 【同时还可能是一个判断值,两个显示值,相当于执行if else,不是第一个就是第二个】 decode函数一般都是用于对一个所需要显示的字段进行判断赋值,例如: select uuid, uname, ( select decode(unit, 1, '项目部', 2, '行政部')

21届Java攻城狮&Python民兵 8065

SOME/IP协议详解「1.1·面向服务与面向信号」

面向信号和面向服务的区别,和举例子

雪云飞星的博客 5651

【ORACLE】decode() 函数

【Oracle】Decode函数

weixin_44203221的博客 5687

C语言使用开源库libusb进行USB设备操作

https://libusb.info/libusb is a C library that provides generic access to USB devices. It is intended to be used by developers to facilitate the production of applications that communicate with USB hardware. It is portable: Using a single cross-platform AP

m0_60352504的博客 1553

Xilinx平台SRIO介绍(二)SRIO IP核基础知识

使用SRIO IP核必须掌握的基础知识! 理解了这篇,剩下的只是代码罢了。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 4万+

Oracle:decode函数

函数介绍: DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能。DECODE有什么用途呢? 先构造一个例子,假设我们想给这些职员加工资,其标准是:工资在8000元以下的加20%;工资在8000元或以上的加15%,通常的做法是,先选出记录中的工资字段值 --->select...

weixin_33750452的博客 108

【002】C++ 语言核心:关键字深度解析与分类指南

auto:自动类型推导bool:布尔类型break:跳出循环或switch语句case:switch语句分支char:字符类型class:定义类const:常量continue:结束当前循环,开始下一次循环default:switch语句默认分支delete:删除对象do:do-while循环double:双精度浮点数类型else:if语句的否定分支enum:枚举类型explicit:显式构造函数export:导出符号extern:声明外部变量或函数。

Lion_Long的博客 1248

decode函数_啃食Oracle:解码函数DECODE

啃食Oracle:解码函数DECODE用途此函数所属的函数组为Encoding and Decoding Functions,同组函数如下:DECODEDUMPORA_HASHVSIZE其它函数用的较少,以下主要讨论DECODE函数。DECODE函数是干嘛的呢?如其名字,解码!谍战剧看过吧,一个特工一个密码本,根据密文解出明文,这个DECODE是密码本吗,不是,它是特工,这个特工能把一个输入值解析...

weixin_39958019的博客 442

Unity零基础到进阶 | Unity 探针系统深度解析:光照探针、反射探针与相关技术

在 Unity 渲染管线中,探针(Probe) 是一类通过预计算或实时采样来捕捉空间光照信息的核心组件。它们弥补了传统静态光照贴图和实时光源各自的局限性,是实现高质量、高性能全局光照效果的关键工具。 本文将系统介绍光照探针(Light Probe)和反射探针(Reflection Probe)的作用与用法,分析二者之间的协同关系,并延伸介绍自适应探针体积(APV)、光照探针代理体(LPPV)、探针体积等进阶技术。

努力前行,总会成为自己心中的那道光 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

oracle decode函数判断条件空_啃食Oracle:解码函数DECODE

啃食Oracle:解码函数DECODE用途此函数所属的函数组为Encoding and Decoding Functions,同组函数如下:DECODEDUMPORA_HASHVSIZE其它函数用的较少,以下主要讨论DECODE函数。DECODE函数是干嘛的呢?如其名字,解码!谍战剧看过吧,一个特工一个密码本,根据密文解出明文,这个DECODE是密码本吗,不是,它是特工,这个特工能把一个输入值解析...

weixin_42311979的博客 2534

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Oracle数据库通用函数:NVL()函数和DECODE()函数

Oracle数据库通用函数:NVL()函数和DECODE()函数 NVL()函数: 如果发现数字内容为null,则用一个常数来替代。 语法: NVL(列|null,为空的默认值)。 select empno,ename,job,sal,sal,comm,NVL(comm,0),(sal+NVL(comm,0))*12 income FROM emp; 这个查询使用了函数NVL(comm,0),把comm列所有的null都替换为0。 DECODE()函数: 多数值判断,指的是在输出的时候,对不同的结果分别

诗酒趁年华。 1388

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Oracle函数介绍:decode

1、Oracle函数介绍:decode   Sql代码  select sum(DECODE(C810000125,'是',1,0))/COUNT(1) 合格率 FROM t581  统计合格率,如果 C810000125这个字段为“是”结果1,不为是结果为0    还可以这样写: Sql代码  select sum(case when C81000

Mondoz的专栏 570

Oracle函数:DECODE()函数

DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。   区别于SQL的其它函数,DECODE函数还能识别和操作空值。   语法:DECODE(control_value,value1,result1[,value2,re...

仰望者! 178

Oracle DECODE函数图解教程:从零到精通

DECODE函数是Oracle SQL中非常实用的条件判断工具,通过本文从简单到复杂的示例,希望你能掌握它的基本用法和常见应用场景。从简单的值替换到复杂的嵌套判断,DECODE都能胜任。在实际工作中,合理使用DECODE可以大大简化SQL语句的编写。如果你想立即尝试这些SQL示例,可以前往InsCode(快马)平台的SQL编辑器,无需安装任何软件就能编写和运行Oracle SQL语句。我实际使用时发现它的响应速度很快,对于学习和测试SQL语句特别方便。

SunstoneLion34的博客 984

解析:怎样使用Oracle的DECODE()函数

DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。  区别于SQL的其它函数,DECODE函数还能识别和操作空值。   语法:DECODE(control_value,value1,result1[,value2,result2…

sclw0488的专栏 965

oracle怎么做判断,Oracle HowTo:如何使用Oracle的Decode函数进行多值判断

Oracle HowTo:如何使用Oracle的Decode函数进行多值判断decode (expression, search_1, result_1)decode (expression, search_1, result_1, search_2, result_2)decode (expression, search_1, result_1, search_2, result_2, .......

weixin_39685762的博客 203
上一篇: Oracle 的 instr()
下一篇: SQL 语句优化
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值