在設計企業報表時,報表單元格的表達式中經常需要用到空值判斷,例如在單元格的顯示值屬性中,判斷當單元格的值為空時,顯示為0,否則顯示單元格的真實值,等等。一般這種情況下,用戶習慣寫的表達式是: if(@value=null, 0, @value)。
如果我們把@value換成更加復雜的表達式,例如if(ds1.getone(…)==null, 0, ds1.getone(…)),大家可以看出,這種算法明顯很慢,需要把ds1.getone(…)這樣的復雜表達式運算兩次,而如果采用nvl() 則可以避免這個問題。
單元格函數:nvl()
函數說明:
根據第一個表達式的值是否為空,若為空則返回指定值
語法:
nvl( valueExp1, valueExp2 )
參數說明:
valueExp1–需要計算的表達式,其結果不為空時返回其值
valueExp2–需要計算的表達式,當valueExp1結果為空時返回此值
返回值:
valueExp1或valueExp2的結果值
示例:
例1:nvl(A1,””) 表示當A1為空時,返回空串,否則返回A1
例2:nvl(@value,0) 表示當當前格為空時返回0,否則返回當前格的值
應用舉例:
正確寫法,速度快:
nvl(ds1.getone(…), 0)
nvl(a1[……]{……}, “–”)
錯誤寫法,速度慢:
if(ds1.getone(…)==null, 0, ds1.getone(…))
if(a1[……]{……}==null, “–”, a1[……]{……})