2014-06-19 22 views
3
  • 爲什麼SELECT COUNT(1+NULL)回報0即使SELECT 1+NULL回報NULL
  • 相對爲什麼SELECT COUNT(NULL)返回錯誤信息Operand data type void type is invalid for count operator即使SELECT NULL回報NULL

需要解釋。計數的物業功能與NULL在SQL Server

+0

好問題,我想你可以從閱讀以下內容開始:http://technet.microsoft.com/en-us/library/ms191504(v=sql.105)。aspx –

回答

4

爲什麼SELECT COUNT(1 + NULL)返回即使0 SELECT 1 + NULL返回NULL

執行任何操作與NULL將返回NULL。所以1 + NULL將返回NULL。 select返回單個值(它是NULL),因爲這是計算結果。

COUNT()根據其計數方式而有所不同。 COUNT(*)返回引用表的基數,即行數。然而,在括號內放置一個表達式,並且COUNT()將消除NULL; 1 + NULL爲NULL所以COUNT(1 + NULL)消除了你提供的一個值並返回0

相對爲什麼SELECT COUNT(NULL)返回錯誤消息操作數的數據類型void類型爲偶數計數操作無效儘管SELECT NULL返回NULL。

NULL沒有隱式類型,所以COUNT()不知道如何處理它並拋出錯誤。

1

如果我們用NULL執行任何算術運算,結果將是NULL。所以我們需要將這個NULL值轉換爲某種東西並且可以執行操作。

請參閱此鏈接Nulls and Aggregate Functions

+0

NULL和集合函數之間的很好的演示 – Shiva

2

1 + nullnull,但count()合計計數不爲空,它不喜歡總和。 你的例子是像Sum(1 +null):= null

見:SELECT SUM(1+ NULL),COUNT(1+ NULL)

0

COUNT聚合函數的COUNT()形式返回所有非空值的計數。這在SQL Server聯機叢書(http://msdn.microsoft.com/en-us/library/ms175997.aspx)中進行了描述:「計算組中每行的表達式並返回非空值的數量。」你的第一個例子傳遞一個NULL值,所以結果數爲零。

關於「操作數數據類型void」錯誤,SQL Server 2012及更高版本中的錯誤消息更加清晰。在SQL Server 2008 R2之後的版本中,您將收到消息「操作數數據類型NULL對count運算符無效」。由於未知的數據類型。當一個無類型的NULL表達式直接由SELECT語句返回時,行爲是不同的。在這種情況下,SQL Server隱式使用數據類型int作爲表達式元數據。