91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle中case和decode如何使用

發布時間:2021-06-23 16:02:03 來源:億速云 閱讀:151 作者:Leah 欄目:關系型數據庫

這期內容當中小編將會給大家帶來有關oracle中case和decode如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

總結:

DECODE 與CASE WHEN 的比較

      1.DECODE 只有Oracle 才有,其它數據庫不支持;

      2.CASE WHEN的用法, Oracle、SQL Server、 MySQL 都支持;

      3.DECODE 只能用做相等判斷,但是可以配合sign函數進行大于,小于,等于的判斷,CASE when可用于=,>=,<,<=,<>,is null,is not null 等的判斷;

      4.DECODE 使用其來比較簡潔,CASE 雖然復雜但更為靈活;

      5.另外,在decode中,null和null是相等的,但在case when中,只能用is null來判斷;decode函數還能用于行轉列。

一、case表達式用法:
case when

case when 類似我們的if ...then..else ,判斷語句

語法如下:

CASE expr WHEN expr1 THEN return_expr1

         [WHEN expr2 THEN return_expr2

          ...

          WHEN exprn THEN return_exprn

          ELSE else_expr]

END

第二種延伸用法:

CASE

         WHEN  expr1 THEN return_expr1

         [WHEN expr2 THEN return_expr2

          ....

          WHEN exprn THEN return_exprn

          ELSE else_expr]

END
-- 如果部門編號為10的,顯示為sal*1.1

-- 如果部門編號為20的,顯示為sal*1.2

-- 如果部門編號為30的,顯示為sal*1.3

-- 否則顯示為sal

-- 這一列查詢的結果,列名顯示為 isal
SQL> select ename,deptno,sal,case deptno when 10 then sal*1.1

  2  when 20 then sal*1.2

  3  when 30 then sal*1.3

  4  else sal

  5  end isal from test_emp;

 ENAME          DEPTNO      SAL       ISAL
----------            ----------     ---------- ----------

AAAABC

SMITH              20             800        960

ALLEN              30            1600       2080

WARD              30            1250       1625

JONES              20             2975       3570

MARTIN          30            1250       1625

BLAKE              30            2850       3705

CLARK              10           2450        2695

SCOTT              20           3002        3602.4

KING                10           5000        5500

TURNER          30          1500        1950

 ADAMS          20           1100       1320

JAMES             30             950       1235

FORD               20          3000       3600

MILLER           10          1300       1430

 15 rows selected.

第二種寫法:
SQL> select ename,deptno,sal,case when deptno=10 then sal*1.1

  2  when deptno=20 then sal*1.2

  3  when deptno=30 then sal*1.3

  4  else sal

  5  end isal from test_emp;

 ENAME          DEPTNO      SAL       ISAL
----------            ----------     ---------- ----------

AAAABC

SMITH              20            800          960

ALLEN              30           1600       2080

WARD             30            1250       1625

JONES              20           2975       3570

MARTIN          30          1250       1625

BLAKE              30          2850       3705

CLARK              10          2450       2695

SCOTT              20         3002       3602.4

KING                10         5000       5500

TURNER          30         1500       1950

ADAMS            20         1100       1320

JAMES              30           950       1235

FORD               20         3000       3600

MILLER            10        1300       1430

 15 rows selected.

case不等值表達式的用法:

SQL> select ename,deptno,sal,case when sal<2000 then sal+200

  2 when  sal between 2000 and 3000 then sal+100

  3  else sal

  4  end isal from test_emp;

 ENAME          DEPTNO      SAL       ISAL
----------            ----------     ---------- ----------

AAAABC

SMITH             20        800       1000

ALLEN              30       1600       1800

WARD              30       1250       1450

JONES              20        2975       3075

MARTIN          30        1250       1450

BLAKE              30       2850       2950

CLARK              10       2450       2550

SCOTT              20       3002       3002

KING                10       5000       5000

TURNER          30       1500       1700

 ADAMS           20       1100       1300

JAMES              30        950       1150

FORD               20       3000       3100

MILLER           10       1300       1500

15 rows selected.


case用于判斷空值,避免使用空值函數
SQL> select ename,sal,comm,case when comm is null then sal else sal+comm end isal from emp;

 ENAME          DEPTNO      SAL       ISAL
----------            ----------     ---------- ----------

AAAABC

SMITH             800                           800

ALLEN            1600        300        1900

WARD            1250        500       1750

JONES             2975                      2975

MARTIN        1250       1400      2650

BLAKE            2850                     2850

CLARK            2450                     2450

SCOTT            3002                    3002

KING             5000                     5000

TURNER       1500          0        1500

ADAMS         1100                    1100

JAMES             950                   950

FORD             3000                  3000

MILLER         1300                  1300

15 rows selected.

二、decode函數用法
語法:

DECODE(col|expression, search2, result1

                       [, search3, result2,...,]

                        ...

                       [, searchn, resultn,...,]

                       [, default])

如果 條件=值1,那么顯示結果1

如果 條件=值2,那么顯示結果2

....

如果 條件=值n,那么顯示結果n

都不符合,則顯示缺省值
decode函數等值表達式的用法,與上面case表達式用法相比簡便一些:
SQL> select ename,deptno,sal,decode(deptno,10,1.1*sal,20,1.2*sal,30,1.3*sal)isal from emp;
 ENAME          DEPTNO      SAL       ISAL
----------            ----------     ---------- ----------
AAAABC
SMITH              20            800        960
ALLEN              30          1600       2080
WARD              30          1250       1625
JONES              20          2975       3570
MARTIN          30         1250       1625
BLAKE              30       2850       3705
CLARK              10       2450       2695
SCOTT              20       3002     3602.4
KING                10       5000       5500
TURNER          30       1500       1950
ADAMS            20       1100       1320
JAMES              30        950       1235
FORD               20       3000       3600
MILLER            10       1300       1430
15 rows selected.
注:decode不能用于非等值用法。

延伸用法:與sign函數聯用比較大小

注:sign()函數根據參數1的值是0、正數還是負數,分別返回0、1、-1

select ename,sal,decode(sign(sal-2000),1, '>2000 ',-1, '<2000 ', '=2000 ') sal_level

from emp;

ENAME                       SAL SAL_LEVEL

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

SMITH                       800 <2000

ALLEN                      1600 <2000

WARD                       1250 <2000

JONES                      2975 >2000

MARTIN                     1250 <2000

BLAKE                      2850 >2000

CLARK                      2450 >2000

SCOTT                      3000 >2000

KING                       5000 >2000

TURNER                     1500 <2000

ADAMS                      1100 <2000

JAMES                       950 <2000

FORD                       3000 >2000

MILLER                     1300 <2000

decode函數用于行轉列的轉換

SQL> select to_char(hiredate,'yyyy') from emp;

TO_C

----
1980

1981

1981

1981

1981

1981

1981

1987

1981

1981

TO_C

----

1987

1981

1981

1982

15 rows selected.

SQL> select to_char(hiredate,'yyyy'),count(*) from emp group by to_char(hiredate,'yyyy');

 TO_C   COUNT(*)

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

                   1

1987          2

1980          1

1982          1

1981         10

SQL> select sum(decode(to_char(hiredate,'yyyy'),'1980',1))"1980",sum(decode(to_char(hiredate,'yyyy'),'1981',1))"1981",
sum(decode(to_char(hiredate,'yyyy'),'1987',1))"1987",sum(decode(to_char(hiredate,'yyyy'),'1982',1))"1982" from emp;

      1980       1981       1987       1982

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

         1         10          2          1

上述就是小編為大家分享的oracle中case和decode如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

耿马| 建平县| 深圳市| 麦盖提县| 凌云县| 辽阳县| 玉门市| 宁陵县| 西安市| 双城市| 柞水县| 佛学| 连江县| 永善县| 金秀| 塔河县| 宁德市| 泰和县| 修武县| 民权县| 衡阳市| 九江县| 望奎县| 虹口区| 尚义县| 桃园市| 会泽县| 宁陵县| 二连浩特市| 湘西| 兴海县| 遵化市| 哈巴河县| 永善县| 平陆县| 大冶市| 天津市| 萍乡市| 马龙县| 乌什县| 汉沽区|