search
HomeDatabaseMysql TutorialOracle中decode函数与case when的使用

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

DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。

区别于SQL的其它函数,DECODE函数还能识别和操作空值。

语法:DECODE(control_value,value1,result1[,value2,result2…][,default_result]);

语法解读:control _value试图处理的数值。DECODE函数将该数值与后面的一系列的偶序相比较,以决定返回值。

value1是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果值将被返回。对应一个空的返回值,可以使用关键字NULL于之对应

result1 是一组成序偶的结果值。

default_result 未能与任何一个值匹配时,函数返回的默认值。

例1:select decode(sign(to_number(to_char(sysdate,'MM'))-6),1,'下半年',-1,'上半年',0,'六月') as MM from dual;

sign()函数根据表达式的值是0、正数还是负数,分别返回0、1、-1;

dual是oracle的虚拟表,比如select sysdate from dual 查询系统当前时间;

此sql根据数据库查询出系统当前时间,取时间的月份,先转换成char型,再将char转换为number型,

当月份减6大于0时,显示下半年,小于0时显示上关年,等于0 时显示六月。

例2:一个员工表,employees和一个部门表,departments;

员工表有员工编号employee_id,员工姓名employee_name,员工工资salary和部门编码department_id;

部门表有部门编号department_id,部门名称department_name;

部题描述:查出各部门的员工工资大于3000和小等于3000的人数。

sql语句:

select d.department_id,
        sum(decode(sign(e.salary - 3000),1,1,-1,0)) maxSal,
        sum(decode(sign(3000 - e.salary),1,1,-1,0)) minSal
        from employees e, departments d
       where e.department_id = d.department_id
       group by d.department_id;


SQL解析:因为当工资小于等于3000时,都返回0,所以用-1代替小于和等于(即0和-1)的情况。

另一解决方法(用case when....then....end):

select d.department_id,
        sum(case when e.salary - 3000 > 0 then 1 else 0 end ) maxSal ,
        sum(case when 3000 - e.salary > 0 then 1 else 0 end ) minSal
        from employees e, departments d
        where e.department_id = d.department_id
        group by d.department_id; 


case when 有多个条件时,用case when .... then .... when ... then .......end

select m.guid as ID,
        case 
          when m.superitemid is null then
           '-1'
          when m.superitemid = '0' then
           '-1'
          else
           m.superitemid
        end as PID,
        m.code || '-' || m.name as TEXT,
        m.code,
        m.name
   from T_PUBMOFDEP m

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
oracle怎么查询所有索引oracle怎么查询所有索引May 13, 2022 pm 05:23 PM

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

什么是oracle asm什么是oracle asmApr 18, 2022 pm 04:16 PM

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

oracle全角怎么转半角oracle全角怎么转半角May 13, 2022 pm 03:21 PM

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

Oracle怎么查询端口号Oracle怎么查询端口号May 13, 2022 am 10:10 AM

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

oracle怎么查询数据类型oracle怎么查询数据类型May 13, 2022 pm 04:19 PM

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

oracle怎么删除sequenceoracle怎么删除sequenceMay 13, 2022 pm 03:35 PM

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

oracle查询怎么不区分大小写oracle查询怎么不区分大小写May 10, 2022 pm 05:45 PM

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

Oracle怎么修改sessionOracle怎么修改sessionMay 13, 2022 pm 05:06 PM

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.