2011-01-28 238 views
3

在SQL Server中,我們可以使用IsNull()函數來檢查表達式值是否爲null。例如。檢查MS Access查詢中的空值

Select IsNull(sum(amount),0) as TotalAmount 
    From Payments 

同樣,MS Access查詢中有任何函數檢查null。我需要在MS Access查詢中執行相同的語句。

可以告訴我在MS Access中替換IsNull()

感謝分享你的時間。

回答

6

在Access中的等價物很多,是nz函數。如何使用它here

但是,如果您使用Access作爲數據庫後端並在您的連接字符串中使用Jet,那麼nz將無法提供給您。

+0

感謝hawbsl時使用!但是當我嘗試從C#代碼使用Nz執行查詢時,我得到Nz未定義的異常。 – IrfanRaza 2011-01-28 12:13:13

+1

我發現IsNull()存在於MS Access中。但是當使用來自C#的查詢時,我得到這個錯誤信息 - 「在查詢表達式中與函數一起使用的錯誤數量的參數IsNull(sum(amount),0)'」 – IrfanRaza 2011-01-28 12:17:19

10

使用Jet/ACE查詢可以重新寫爲:

SELECT IIf(Sum(amount) Is Null, 0, Sum(amount)) AS TotalAmount 
FROM Payments 

這應該從C#甚至工作,因爲Is NullIIf都內置到Jet/ACE。請注意0​​中的空格和缺少括號(它是陳述,而不是函數)。

有兩個加獎金使用IIfIs Null相對於即使NzNz是提供給您:

  • 因爲所有的處理都在數據庫引擎內完成它的執行速度更快(因此它不」 t必須對Access庫進行函數調用)
  • 它保留字段的原始類型;因爲Nz返回一個Variant,捷達/ ACE被迫結果顯示爲一個字符串(通常是不是你想要的使用日期,數字,等等打交道時)

UPDATE:艾倫·布朗有excellent primer關於使用IIf,Nz,IsNull()Is Null。我打算將該鏈接發佈爲我的原始答案,但我當時找不到該頁面。我盡我所能從記憶中獲得了最好的回報,但真正的功勞歸功於布朗先生。

0

同樣, 也可以在日期和時間排序

.....ORDER BY TRANSDATE ASC,(IIf([PaymentTime] Is Null, '23:59:59', [PaymentTime])) DESC