DECODE 条件取值

语法

decode(条件, 值1, 返回值1, 值2, 返回值2, ..., 值n, 返回值n, 缺省值)

功能

根据条件返回相应值。假如 decode 如下:

decode(条件, 值1, 返回值1, 值2, 返回值2, ..., 值n, 返回值n, 缺省值)

上面语句中,含义如下:

  • 如果“条件”等于“值1”,则返回“返回值1”;

  • 如果“条件”等于“值2”,则返回“返回值2”;

  • 如果“条件”等于“值n”,则返回“返回值n”;

  • 如果“条件”没有匹配到任何值,则返回“缺省值”;

如果将上面 decode 函数转化为 IF-ELSE 语句如下:  

IF 条件=值1 THEN
    RETURN(返回值1)
ELSIF 条件=值2 THEN
    RETURN(返回值2)
......
ELSIF 条件=值n THEN
    RETURN(返回值n)  
ELSE
    RETURN(缺省值)
END IF

转换成 CASE WHEN THEN END 语句如下:

CASE WHEN 条件=值1 THEN
    RETURN(返回值1)
WHEN 条件=值2 THEN
    RETURN(返回值2)
......
WHEN 条件=值n THEN
    RETURN(返回值n)  
ELSE
    RETURN(缺省值)
END

注意:值1……值n 不能为条件表达式,这种情况只能用 CASE WHEN THEN END 语句解决

参数

  • 条件:表达式或具体的值

  • 值1...值n:字符型/数值型/日期型,必须类型相同或 null

  • 返回值1...返回值n:字符型/数值型/日期型,必须类型相同或 null

返回值

同返回值类型

示例

(1)使用 decode 函数判断当前数据是星期几,如下:

-- 星期表数据
SQL> select * from t_week;

       XQN
----------
         1
         2
         3
         4
         5
         6
         7

已选择7行。


-- 根据星期几下标返回中文星期名
SQL> select xqn, decode(xqn,1,'星期一',2,'星期二',3,'星期三','星期三之后') from t_week;

       XQN DECODE(XQN
---------- ----------
         1 星期一
         2 星期二
         3 星期三
         4 星期三之后
         5 星期三之后
         6 星期三之后
         7 星期三之后

已选择7行。

(2)比较大小,如下:

SQL> select decode(sign(10-3),-1,100,200) from dual;

DECODE(SIGN(10-3),-1,100,200)
-----------------------------
                          200

sign() 函数根据某个值是 0、正数还是负数,分别返回 0、1、-1。sign(10-3) 返回 1,decode 解码结果为“默认值”。

关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号