1. Case具備兩種格式。簡單Case函數和Case搜索函數。數據庫
--簡單Case函數 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其餘' END --Case搜索函數 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其餘' END
以下:oracle
select case when t.a = '2' then '是1' else '不是1' end A from AAA tdom
-------------------------------------------------------------------------------------------------------------------函數
1、DECODE ( )ui
語法:decode(expr,search1,result1,lua
search2,result2,code
……blog
search n,result n, default)ci
解釋:decode函數將expr值與各search值一個一個比對,若expr值等於search值oracle數據庫返回其對應的result值;若沒有匹配的search值,則返回default值;若函數中default值缺省則返回null。get
說明:
1. search, result 和 default 值能夠使表達式。oracle數據庫使用short-circuit evaluation,簡單點說就是按順序先計算了search1的值跟expr比較,若不行則繼續對search2執行同樣的操做,一旦找到匹配的search值,則再也不對後面的search值進行計算比對。
2. 在比較以前,oracle自動將expr和每個search值的數據類型轉換成第一個search值的數據類型。同理也把全部result值的數據類型轉換成第一個result值的數據類型。若第一個result值的數據類型爲CHAR或第一個result值缺省,那麼oracle就令返回值的數據類型爲VARCHAR2。
3.在decode函數中,oracle默認兩個null值是相等的,若expr爲null,則oracle返回search1的result爲null。
4.decode函數中包括expr,search , result 和 default 值在內,最多可包含255個參數。
實例:
SELECT product_id,
DECODE (warehouse_id, 1, 'Southlake',
2, 'San Francisco',
3, 'New Jersey',
4, 'Seattle', 'Non domestic') "Location"
FROM inventories
WHERE product_id < 1775
ORDER BY product_id, "Location";
延伸用法:
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
2. 表、視圖結構轉化:
基本思路:
使用substrb函數實現對字段的判斷,而後用decode函數對數據進行從新計算,並生成新的數據和構成新的表(table or view)。
2、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 子句均可以使用
3、比較
1.DECODE 是Oracle特有的;
2.CASE WHEN 是Oracle, SQL Server,MySQL 均可用;
3.DECODE 只能用作相等判斷,可是能夠配合sign函數進行大於,小於,等於的判斷;CASE可用於=,>=,<,<=,<>,is null,is not null 等的判斷;
4.DECODE 使用其來比較簡潔,CASE 雖然複雜但更爲靈活。