溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle Decode函數(shù)的使用

發(fā)布時(shí)間:2020-07-23 05:06:22 來(lái)源:網(wǎng)絡(luò) 閱讀:513 作者:onlinekof2001 欄目:關(guān)系型數(shù)據(jù)庫(kù)

DECODE函數(shù)的可以根據(jù)用戶給定的判定條件給定想要的結(jié)果

語(yǔ)法:

Oracle Decode函數(shù)的使用

DECODE(expr,{search,result,}….,default) 這里給的search,result可以是多個(gè),而括號(hào)里所有元素的組合最多是255個(gè).

 

今天在寫一個(gè)語(yǔ)句的時(shí)候有一個(gè)簡(jiǎn)單的想法,就是遇到數(shù)值的進(jìn)行自動(dòng)換算,遇到字符返回原值

selectname,value

  from v$parameter

 wherenamein ('control_file_record_keep_time',

                'db_block_size',

                'db_cache_advice',

                'db_cache_size',

                'db_file_multiblock_read_count',

                'db_flashback_retention_target',

                'db_recovery_file_dest_size',

                'job_queue_processes',

                'optimizer_index_cost_adj',

                'optimizer_mode',

                'processes',

                'sort_area_size')

比如查詢v$parameter視圖時(shí)候,value的類型是varchar2

Oracle Decode函數(shù)的使用

其查詢結(jié)果如下:

Oracle Decode函數(shù)的使用

很明顯這樣顯示是不夠人性的,所以我試圖把value值表示大小的轉(zhuǎn)化為人類可讀的情況,已知該視圖根據(jù)value的類型進(jìn)行了分類,可以看一下TYPE這個(gè)列

問(wèn)題到這里就出現(xiàn)了。發(fā)現(xiàn)文字類型的是無(wú)法被轉(zhuǎn)換的,我用下面這條語(yǔ)句嘗試報(bào)錯(cuò)

selectname,decode(type,6,round(value/1024/1024,2),3,value,value)

  from v$parameter

 wherenamein ('control_file_record_keep_time',

                'db_block_size',

                'db_cache_advice',

                'db_cache_size',

                'db_file_multiblock_read_count',

                'db_flashback_retention_target',

                'db_recovery_file_dest_size',

                'job_queue_processes',

                'optimizer_index_cost_adj',

                'optimizer_mode',

                'processes',

                'sort_area_size')

 orderbyname;

Oracle Decode函數(shù)的使用

無(wú)效的數(shù)值?明明是字符類型的,什么時(shí)候被轉(zhuǎn)換成數(shù)值類型的?反復(fù)嘗試發(fā)現(xiàn)問(wèn)題就出在VALUE是字符的參數(shù)項(xiàng)上,這點(diǎn)確實(shí)有點(diǎn)困惑,反過(guò)來(lái)嘗試成功了。

 Oracle Decode函數(shù)的使用

查看官方文檔中有如下兩句話:

·         If expr and search are character data, then Oracle compares them using nonpadded comparison semantics. expr, search, and result can be any of the data types CHAR, VARCHAR2, NCHAR, or NVARCHAR2.The string returned is of VARCHAR2 data type and is in the same character set as the first result parameter.

·         If the first search-result pair are numeric, then Oracle compares all search-result expressions and the first expr to determine the argument with the highest numeric precedence, implicitly converts the remaining arguments to that data type, and returns that data type.

 

內(nèi)容提到DECODE中的進(jìn)行比較時(shí),如果exprsearch是字符類的,那么后續(xù)的結(jié)果可能會(huì)是任意字符類型的,這個(gè)類型根據(jù)第一個(gè)result返回的字符類型來(lái)確定,也就是說(shuō)如果首個(gè)exprsearch比對(duì)后,返回的resultvarchar2類型,那么后續(xù)的結(jié)果將都會(huì)以varchar2類返回。

 

另外如果首個(gè)比對(duì)的exprsearch是具有更高優(yōu)先級(jí)的數(shù)值型數(shù)據(jù),其結(jié)果就會(huì)把后續(xù)的所有參數(shù)轉(zhuǎn)化為數(shù)值類型。

 

根據(jù)對(duì)上述內(nèi)容理解,我進(jìn)行類型轉(zhuǎn)化如下,發(fā)現(xiàn)語(yǔ)句果然能正確執(zhí)行了:

Oracle Decode函數(shù)的使用

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI