`

ORACLE 中DECODE和 CASE WHEN函数使用方式

阅读更多

decode是pl/sql语法,只能在oracle中使用,
case when是标准SQL的语法,哪儿都能用,也就是说移植性更强.

decode像是case when的精简版,
DECODE只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,<,<=,<>,is null,is not null 等的判断;
当要实现的功能比较简单时,用decode方便,简洁.
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

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. 比如我要查询某班男生和女生的数量分别是多少? 

通常我们这么写: 

select count(*) from 表 where 性别 = 男; 
select count(*) from 表 where 性别 = 女;
要想显示到一起还要union一下,太麻烦了 

用decode呢,只需要一句话 
select decode(性别,男,1,0),decode(性别,女,1,0) from 表

3,order by对字符列进行特定的排序

大家还可以在Order by中使用Decode。

例:表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以非常轻松的使用Decode完成要求了。 

select * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, , '外语',3)

4. 延伸用法:
a. 与sign函数联用比较大小:
语法:select decode(sign(arg1-arg2),-1, arg1, arg2) from dual; --get arg1与arg2的较小值  
实例:select decode(sign(3-5),1 ,3, 5) from dual  
注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
b. 表、视图结构转化:
基本思路:
使用substrb函数实现对字段的判断,然后用decode函数对数据进行重新计算,并生成新的数据和构成新的表(table or view)。



COALESCE
把表达式中的每个表达式与NULL比较,返回第一个非NULL 的表达式的值。结构如下:
COALSECE (x1,x2,...,xn);

CASE WHEN

语法:


SELECT     CASE  
            WHEN price IS NULL THEN 'Unpriced'           

             WHEN price < 10 THEN 'Bargain'           

             WHEN price BETWEEN 10 and 20 THEN 'Average'           

             ELSE 'Gift to impress relatives'       

            END AS "Range",       

            Title   

 FROM titles   
 where   
     CASE 
                 WHEN price IS NULL THEN 'Unpriced'           

                 WHEN price < 10 THEN 'Bargain'           

                 WHEN price BETWEEN 10 and 20 THEN 'Average'           

                 ELSE 'Gift to impress relatives'     END in('Average','Bargain')  

 GROUP BY     CASE  
                 WHEN price IS NULL THEN 'Unpriced'           

                 WHEN price < 10 THEN 'Bargain'           

                 WHEN price BETWEEN 10 and 20 THEN 'Average'           

                 ELSE 'Gift to impress relatives'     END,       

                 Title   

 ORDER BY     CASE
                 WHEN price IS NULL THEN 'Unpriced'           

                 WHEN price < 10 THEN 'Bargain'           

                 WHEN price BETWEEN 10 and 20 THEN 'Average'           

                 ELSE 'Gift to impress relatives'       

                 END,Title  

解释:除了可以在select 中使用CASE 外,where 子句,group by 子句,order by 子句都可以使用



先建立一个表
create table salgrade(grade int, sal int);

 insert into salgrade values(1,1000);
 insert into salgrade values(2,2000);
 insert into salgrade values(3,3000);
 commit;
case在SQL中有两种写法,
第一种写法,简单写法:
select grade,sal,
    case grade
         when 1 then 'low'
         when 2 then 'middle'
         else 'high'
    end
 from salgrade;

第二种写法,查找写法:
SELECT grade,sal,
     case when sal<=1000 and sal<>0 then 'low'
          when sal<=2000 then 'middle'
          else 'high'
     end
   FROM salgrade;

decode只能代替第一种写法:
select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;
分享到:
评论

相关推荐

    decode函数与case when 的妙用

    在数据库管理和SQL编程中,`DECODE`函数和`CASE WHEN`语句是两种非常重要的逻辑判断工具,它们常用于处理条件分支和数据转换。在这篇文章中,我们将深入探讨这两种方法的用途、区别以及如何巧妙地运用它们。 首先,...

    Oracle-Decode()函数和CASE语句的比较

    Oracle数据库中的`Decode()`函数和`CASE`语句都是用于条件判断和数据转换的重要工具,它们各有特点,适用场景也有所不同。以下是对这两个功能的详细比较。 首先,`Decode()`函数是一个简化的条件表达式,它允许你在...

    Oracle用decode函数或CASE-WHEN实现自定义排序

    `DECODE`函数和`CASE-WHEN`语句都是实现这一目标的有效工具。根据实际的业务需求和性能考虑,可以选择合适的方法进行应用。在编写SQL时,确保理解并充分利用这些高级功能,可以提升代码的可读性和执行效率。希望本文...

    ORACLE 列转行 DECODE函数用法

    在实际工作中,你可能还需要结合其他SQL函数,如CASE WHEN或NVL,来进一步增强DECODE的功能。例如,当你需要处理可能的NULL值时,NVL函数可以提供一个默认值,防止因NULL而导致的结果异常。 总之,Oracle的DECODE...

    oracle的decode函数

    - **性能考量**:虽然`DECODE`函数在简单场景下非常有效,但在复杂逻辑或大量数据的情况下,使用`CASE WHEN`或其他方式可能会更加高效。 总之,`DECODE`函数是Oracle数据库中一个非常有用的工具,尤其适用于需要...

    Oracle_case_when_用法

    `CASE WHEN` 与 `DECODE()` 函数相似,但因其符合 ANSI 标准而更受推荐使用。 #### 二、基本结构 `CASE WHEN` 语句的基本结构如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ...

    ORACLE DECODE函数在中国式报表统计查询中的组合条件实现

    然而,在面对复杂的多条件组合统计需求时,`DECODE`函数的应用可能会变得相对繁琐,这时往往更倾向于使用`CASE WHEN`语句或创建视图的方法来解决。不过,如果出于特定原因需要坚持使用`DECODE`函数,那么了解如何...

    [数据库] Oracle使用CASE判断解决多值问题1

    为了简化这一过程,我们可以利用Oracle SQL的内置函数,如DECODE和CASE WHEN,直接在数据库层面进行处理。 首先,尝试使用DECODE函数。DECODE函数允许我们根据指定的条件返回不同的值。例如,DECODE(ZY_TYPE, '国家...

    oracle case when 语句的用法详解

    综上所述,Oracle的CASE WHEN语句是数据库查询中处理条件分支的重要工具,可以在SELECT、WHERE和GROUP BY等不同场景中使用,提供了一种灵活的方式来构造复杂的逻辑判断。了解并熟练运用CASE WHEN,能够显著提升SQL...

    Oracle高级操作函数学习笔记

    在提供的内容中,通过DECODE函数实现了工资的区间判断显示,使用CASE语句完成了加薪规则的计算,还演示了如何使用UNION、INTERSECT和MINUS进行集合操作。这些知识点展示了Oracle在数据处理方面的灵活性和高效性,...

    mysql与oracle差异总结

    MySql 中的 CASE WHEN 语句可以替换 DECODE 函数。MySql 中的 TEXT 等同于 Oracle 中的 LONG 函数。 13. 日期函数 MySql 中的 EXTRACT 函数可以提取日期的年、月、日等信息,而 Oracle 需要使用 TO_CHAR 函数来...

    Oracle的110个自带函数总结归纳

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数是其核心优势之一。在Oracle中,函数用于处理各种类型的数据,包括数学运算、字符串处理、日期时间操作、逻辑判断等。以下是对...

    Oracle常见函数集锦

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数使得数据处理变得高效而灵活。本篇文章将深入探讨“Oracle常见函数集锦”,主要关注在SQL查询中常用的Oracle函数,这些函数对于数据...

    Oracle110个常用函数……PDF清晰版

    通过以上知识点的介绍,希望能够帮助读者更好地理解和掌握Oracle数据库中的常用函数及其应用场景。这些函数不仅能够提高开发效率,还能帮助解决实际工作中的各种问题。在实际使用过程中,还需要不断积累经验并灵活...

    Oracle函数使用大全

    6. **条件函数**:IFNULL()和NVL()用于处理空值,DECODE()根据条件返回不同值,CASE...WHEN...END结构实现复杂的条件判断。 7. **排序和排名函数**:RANK(), DENSE_RANK(), ROW_NUMBER()在分组后的数据中生成顺序...

    oracle 内置函数大全

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。Oracle内置函数是其强大功能的关键组成部分,这些函数极大地丰富了SQL语言的表达能力,使得数据处理和查询更为便捷高效...

    Oracle函数大全

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数是其核心优势之一。在Oracle函数大全中,我们涵盖了各种类型的功能,包括数学、字符串处理、日期时间操作、逻辑判断以及转换函数等,...

    oracle 10g函数大全.

    Oracle 10g是一款历史悠久但仍然广泛使用的数据库管理系统,它提供了丰富的函数库,使得SQL查询和数据处理变得更为强大和灵活。在这个“Oracle 10g函数大全”中,我们将会探讨一些重要的Oracle 10g函数,这些函数...

    Oracle函数大全.pdf

    在Oracle数据库中,函数是一类预定...以上内容涵盖了Oracle中常见的函数及其用途,学习和掌握这些函数对于有效地使用Oracle数据库至关重要。在实际应用中,根据需要选择合适的函数可以大大提高查询效率和数据处理能力。

Global site tag (gtag.js) - Google Analytics