淺談oracle中的decode函數(shù)

??? 最近發(fā)現(xiàn)oracle數(shù)據(jù)庫中一個(gè)自帶的函數(shù)decode。

??? 查看了一下用法,簡直了。真是太好用了,看來多看API,真的可以短時(shí)間讓我們有很大的提升。(雖然我也是讀代碼的過程中看到的~~)

??? DECODE是Oracle公司獨(dú)家提供的功能(ps:informix數(shù)據(jù)庫也提供該函數(shù)),它是一個(gè)功能很強(qiáng)的函數(shù)。它雖然不是SQL的標(biāo)準(zhǔn),但對于性能非常有用。到目前,其他的數(shù)據(jù)庫供應(yīng)商還不能提供類似DECODE的功能,甚至有的數(shù)據(jù)庫的供應(yīng)商批評Oracle的SQL不標(biāo)準(zhǔn)。實(shí)際上,這種批評有些片面或不夠水平。就象有些馬車制造商抱怨亨利·福特的“馬車”不標(biāo)準(zhǔn)一樣。(來自百度百科)

??? 一種吃不到葡萄說葡萄酸的感覺。但是為何說這個(gè)函數(shù)很強(qiáng)大呢,因?yàn)槟阍跀?shù)據(jù)庫中寫了很多行的If函數(shù),可能用了decode函數(shù)后,一行就可以解決。寫完后,代碼簡潔明了,絕對上升了好幾個(gè)檔次。

??? 說一下具體的用法,你真的會“臥槽,這么強(qiáng)”

? ? decode(條件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值),這行代碼就是decode全部的精髓以及用法。

? ? 該函數(shù)的含義如下:

IF 條件=值1 THEN? RETURN(返回值1)

ELS IF 條件=值2 THEN? RETURN(返回值2)

......

ELSIF 條件=值n THEN? RETURN(返回值n)

ELSE? RETURN(缺省值)

END IF


decode(字段或字段的運(yùn)算,值1,值2,值3)

??? 這個(gè)函數(shù)運(yùn)行的結(jié)果是,當(dāng)字段或字段的運(yùn)算的值等于值1時(shí),該函數(shù)返回值2,否則返回值3

??? 當(dāng)然值1,值2,值3也可以是表達(dá)式,這個(gè)函數(shù)使得某些sql語句簡單了許多

下面舉兩個(gè)栗子:

栗子1:

??? 你要統(tǒng)計(jì)students表中,男生女生的數(shù)量:

??? 傳統(tǒng)寫法如下:

select count(*) from students where 性別 = 男;

select count(*) from students where 性別 = 女;

??? 然后使用Union連接,得到最終的統(tǒng)計(jì)結(jié)果。

??? 現(xiàn)在你只需要這樣來寫:

select decode(性別,男,1,0),decode(性別,女,1,0) from students

栗子2:

??? 應(yīng)用到order by 排序中:

??? 在表中,有一列為學(xué)科,分別為語文,數(shù)學(xué),英語,自然,美術(shù)等等,你要將表中信息按照學(xué)科分類。

??? 可以使用decode這樣來寫:

select * from 學(xué)科 order by decode(學(xué)科, '語文', 1, '數(shù)學(xué)', 2, , '外語',3...)


??? 上面兩個(gè)例子,可以說明使用decode可以使我們sql代碼簡潔明了,可讀性更強(qiáng)。



每天進(jìn)步一點(diǎn)點(diǎn)。

推薦微信公眾號【排骨肉段】,記錄日常的美好。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容