`
xuegao199
  • 浏览: 30865 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

DECODE函数和CASE WHEN 比较

    博客分类:
  • SQL
阅读更多

一,DECODE函数

 

其基本语法为:
DECODE(value, if1, then1, if2, then2, if3, then3,...ifn, thenn, else)
表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。亦即:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
延伸用法:
1. 与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
2. 表、视图结构转化:
基本思路:使用substrb函数实现对字段的判断,然后用decode函数对数据进行重新计算,并生成新的数据和构成新的表(table or view)。

二,CASE WHEN

其语法如下:

SELECT <myColumnSpec> = 
  CASE WHEN <A> THEN <somethingA> 
     WHEN <B> THEN <somethingB> 
     ELSE <somethingE> END
 

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

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 

rm_site_master 表结构:

rma_center | name

---------------------------

123              |qw

23                |ASde

45                |sssdf

55                |e3fbg

55555          |adfv

22221          |sdfsfe

4                  |sdfeg

579              |lojgdex

 

 

 

select name,
       CASE         
        WHEN rma_center IS NULL THEN 'Null'         
        WHEN rma_center > 1000 THEN '>1000'         
        WHEN rma_center BETWEEN 30 and 100 THEN '30~100'         
        ELSE 'Gift to impress relatives'     END  AS "RMA CENTER Type"                    
from rm_site_master 
where  CASE         
        WHEN rma_center IS NULL THEN 'Null'         
        WHEN rma_center > 1000 THEN '>1000'         
        WHEN rma_center BETWEEN 30 and 100 THEN '30~100'         
        ELSE 'Gift to impress relatives'     END in('30~100','>1000')
group by CASE         
        WHEN rma_center IS NULL THEN 'Null'         
        WHEN rma_center > 1000 THEN '>1000'         
        WHEN rma_center BETWEEN 30 and 100 THEN '30~100'         
        ELSE 'Gift to impress relatives'     END,
        name
order by CASE         
        WHEN rma_center IS NULL THEN 'Null'         
        WHEN rma_center > 1000 THEN '>1000'         
        WHEN rma_center BETWEEN 30 and 100 THEN '30~100'         
        ELSE 'Gift to impress relatives'     END,
        name

 

三,DECODE 与CASE WHEN 的比较

 1,DECODE  Oracle 特有;
 2,CASE WHEN  Oracle ,  SQL Server,  MySQL 都可用;
 3,DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE  可用于=,>=,<,<=,<>,is null,is not null 等的判断;

    4,DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;

分享到:
评论

相关推荐

    decode函数与case when 的妙用

    在阅读博客文章《decode函数与case when 的妙用》时,作者可能分享了一些具体的示例和使用技巧,帮助我们更好地理解和掌握这两种方法。通过学习和实践,我们可以将这些知识应用于日常的数据库操作,优化数据处理流程...

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

    1. **DECODE函数** Oracle的`DECODE`函数是一种条件判断函数,它可以用于对数据进行简单的多值比较和返回。在自定义排序场景中,`DECODE`函数可以将不同的字段值映射到对应的排序值。以下是一个例子: ```sql ...

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

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

    oracle的decode函数

    ### Oracle的DECODE函数详解 #### 一、DECODE函数简介 在Oracle数据库中,`DECODE`函数是一种非常实用的条件判断函数,其功能类似于编程语言中的`IF`语句。通过比较输入值与一系列预设值,该函数能够根据匹配情况...

    ORACLE 列转行 DECODE函数用法

    在Oracle数据库中,DECODE函数是一个非常实用的工具,它允许你在SQL查询中进行条件判断,将特定的值转换为其他值。...在实际应用中,不断实践和探索DECODE函数的不同用法,将会使你在处理数据库数据时更加得心应手。

    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 when 语句的用法详解

    DECODE()函数是Oracle特有的,它可以作为CASE WHEN的替代品,但不支持复杂的条件: ```sql SELECT decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown') FROM employees; ``` 尽管如此,DECODE()在某些情况下可能更...

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

    当一个专业同时是“国家特色专业”和“省示范专业”时,DECODE函数无法区分这种情况。 于是,我们转向CASE WHEN语句。CASE WHEN提供了更灵活的条件判断能力。例如,我们可以这样写: ```sql SELECT ZY_NAME, ...

    Oracle高级操作函数学习笔记

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

    SQL学习笔记.docx

    CASE WHEN 函数的语法为 CASE WHEN condition THEN result [ WHEN condition THEN result ... ] ELSE result END,其中 condition 是条件,result 是执行的结果。 SIGN 函数 SIGN 函数是一个数学函数,用于返回一...

    数据库基础 高级sql编程

    在高级 SQL 编程中,Case 与 Decode 是两个非常有用的函数,它们能够极大地提高数据处理能力和查询效率。 高级 SQL 编程在数据库开发技术中扮演着非常重要的角色,它能够极大地提高数据库的查询效率和数据处理能力...

    oracle sql 行列转换

    无论是使用CASE语句、DECODE函数还是PIVOT操作符,关键在于理解数据结构和转换需求,选择最合适的工具来实现转换。这些技能对于高效处理和分析复杂数据集至关重要,尤其是在IT行业中,掌握这些技能将大大提高数据...

    orcale数据库 行列互换

    在Oracle中,可以使用SQL的CASE语句或者DECODE函数来实现行转列。例如,在提供的描述中,我们看到一个例子是将学生的语文和数学分数从行转换为了列。 ```sql SELECT student AS '姓名', SUM(CASE name WHEN '语文'...

    oracle练习_面试题

    Oracle 提供了两种函数来实现条件选择,即 CASE 函数和 DECODE 函数。CASE 函数可以根据条件选择不同的值,DECODE 函数可以根据条件选择不同的值或表达式。 示例: ```sql SELECT t.ename, CASE t.deptno WHEN ...

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

    - **语法**:`CASE WHEN condition THEN result [WHEN ...] [ELSE default_result] END`, `DECODE(column, search, result[, search, result ...[, default]])`, `NULLIF(expression1, expression2)` - **示例**:...

    db2,oracle函数大全合集

    7. **条件函数**:如`IF()`, `CASE WHEN THEN END`, 用于逻辑判断和条件表达式。 Oracle函数: 1. **转换函数**:包括`TO_CHAR()`, `TO_DATE()`, `TO_NUMBER()`, 支持不同数据类型间的转换。 2. **数学函数**:如`...

    Oracle常见函数集锦

    - `CASE WHEN...END`:提供更复杂的条件判断逻辑。 5. **聚合函数** - `COUNT()`:计算行数。 - `SUM()`:求和。 - `AVG()`:计算平均值。 - `MAX()` 和 `MIN()`:找出最大值和最小值。 6. **窗口函数** - `...

Global site tag (gtag.js) - Google Analytics