中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

额尔古纳市| 北京市| 太谷县| 长顺县| 义马市| 金华市| 湟源县| 邹平县| 平和县| 铁力市| 垫江县| 新昌县| 平远县| 娄烦县| 筠连县| 穆棱市| 贵州省| 安平县| 晴隆县| 建平县| 遵义市| 车险| 白山市| 丰都县| 祁连县| 营口市| 梓潼县| 南宁市| 台江县| 汝南县| 新安县| 潮州市| 新泰市| 五常市| 繁峙县| 涞水县| 巴楚县| 永州市| 固阳县| 蒲江县| 长岭县|