oracle中Null欄位的計算問題

2021-07-23 16:35:18 字數 597 閱讀 9522

最近在修改專案中乙個統計的bug,統計出的錢數不對,因為不是自己開發的模組,經過分析流程找到了統計的sql。

sql片段:sum(f_msmoney)+sum(f_fkmoney) as total,

上面這段是計算錢數的sql,看上去沒有什麼問題,但是sql查出來的total值居然是null,然後開始檢查表結構和資料,發現兩個字段型別為varchar2且有乙個有值,另乙個欄位為空。起初先驗證是不是資料型別不是number不能進行計算,但很快我的想法被否認了,我用to_number對欄位進行轉換,查詢結構依舊為null。接下來就開始驗證是不是null在作怪,結果是肯定,當兩個值都不為空是可以計算出結果,當有乙個是null時,sum()後再相加,最終結果也是null。

ok,問題找到,開始解決問題。

其實解決這個問題的辦法也不少,下來乙個乙個來分析:

第一種方案,修改下資料庫字段型別,設定預設值。但是專案已處於後期測試階段,貿然修改資料結構不太妥,如果是專案初期可以考慮。

第二種方案,慶幸的是oracle有nvl(,0)這個函式,具體作用就是判斷字段是不是,如果是就返回傳入的預設值,其實是也就是在sql中獲取是設定預設值,這種方式比較符合專案的目前的狀況,於是採用這種方法完美解決。

Oracle中null的使用

問 什麼是null?答 在我們不知道具體有什麼資料的時候,也即未知,可以用null,我們稱它為空,oracle中,含有空值的表列長度為零。oracle允許任何一種資料型別的字段為空,除了以下兩種情況 1 主鍵字段 primary key 2 定義時已經加了not null限制條件的字段 說明 1 等...

oracle排序欄位為null查詢出的值在前和在後

nulls first和nulls last是oracle order by支援的語法 如果order by 中指定了表示式nulls first則表示null值的記錄將排在最前 不管是asc 還是 desc 如果order by 中指定了表示式nulls last則表示null值的記錄將排在最後 ...

Oracle中null的使用詳解

問 什麼是null?答 在我們不知道具體有什麼資料的時候,也即未知,可以用null,我們稱它為空,oracle中,含有空值的表列長度為零。oracle允許任何一種資料型別的字段為空,除了以下兩種情況 1 主鍵字段 primary key 2 定義時已經加了not null限制條件的字段 說明 1 等...