一、除法函數(shù)介紹
Oracle數(shù)據(jù)庫中的除法函數(shù)主要有兩種:/(整除運(yùn)算符)和div函數(shù)。在進(jìn)行除法運(yùn)算時(shí),/運(yùn)算符只保留整數(shù)部分并舍棄小數(shù)部分,而div函數(shù)則進(jìn)行四舍五入并返回一個(gè)整數(shù)結(jié)果。
-- /運(yùn)算符示例
SELECT 5/2 FROM dual;
-- div函數(shù)示例
SELECT DIV(5,2) FROM dual;
以上兩個(gè)查詢結(jié)果都是2,因?yàn)?運(yùn)算符返回的結(jié)果默認(rèn)是整數(shù)類型,即向下取整。div函數(shù)則是將結(jié)果進(jìn)行四舍五入,并返回整數(shù)類型的結(jié)果。
二、除數(shù)為0的情況處理
在除數(shù)為0的情況下,/運(yùn)算符會(huì)返回一個(gè)無窮大的數(shù)值類型,而div函數(shù)會(huì)報(bào)錯(cuò)并返回空值。因此,在進(jìn)行除法運(yùn)算時(shí),我們需要注意除數(shù)不能為0。
-- /運(yùn)算符除數(shù)為0示例
SELECT 5/0 FROM dual;
-- div函數(shù)除數(shù)為0示例
SELECT DIV(5,0) FROM dual;
以上兩個(gè)查詢結(jié)果都會(huì)報(bào)錯(cuò)。
三、除數(shù)為負(fù)數(shù)的情況處理
在進(jìn)行除法運(yùn)算時(shí),如果除數(shù)為負(fù)數(shù),則結(jié)果也會(huì)為負(fù)數(shù)。
-- /運(yùn)算符除數(shù)為負(fù)數(shù)示例
SELECT 5/-2 FROM dual;
-- div函數(shù)除數(shù)為負(fù)數(shù)示例
SELECT DIV(5,-2) FROM dual;
以上兩個(gè)查詢結(jié)果都是-2。
四、除數(shù)和被除數(shù)的數(shù)據(jù)類型轉(zhuǎn)換
在進(jìn)行除法運(yùn)算時(shí),如果除數(shù)和被除數(shù)的數(shù)據(jù)類型不一致,則Oracle會(huì)自動(dòng)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。
-- 將數(shù)值類型的5轉(zhuǎn)換為字符類型再進(jìn)行/運(yùn)算符運(yùn)算
SELECT '5'/2 FROM dual;
-- 將字符類型的'5'轉(zhuǎn)換為數(shù)值類型再進(jìn)行div函數(shù)運(yùn)算
SELECT DIV('5',2) FROM dual;
以上兩個(gè)查詢結(jié)果都是2。在進(jìn)行/運(yùn)算符運(yùn)算時(shí),Oracle會(huì)將字符'5'轉(zhuǎn)換為數(shù)值類型進(jìn)行運(yùn)算。而在進(jìn)行div函數(shù)運(yùn)算時(shí),Oracle會(huì)將字符'5'轉(zhuǎn)換為數(shù)值類型再進(jìn)行運(yùn)算。
五、四舍五入規(guī)則
div函數(shù)進(jìn)行除法運(yùn)算時(shí),會(huì)涉及到四舍五入的問題。在div函數(shù)中,除法運(yùn)算結(jié)果是向真實(shí)數(shù)值最近的整數(shù)進(jìn)行四舍五入的。即,對于小數(shù)部分0.5及以上的數(shù)值,會(huì)向整數(shù)部分進(jìn)1;對于小數(shù)部分0.5以下的數(shù)值,會(huì)向整數(shù)部分舍去。
-- div函數(shù)四舍五入示例
SELECT DIV(5,3) FROM dual;
SELECT DIV(7,3) FROM dual;
SELECT DIV(-5,3) FROM dual;
SELECT DIV(-7,-3) FROM dual;
以上四個(gè)查詢結(jié)果分別為2、2、-2、3。