2011-09-17 31 views
2

根據我的理解,IsNull函數檢查第一個值,如果其爲空或空白,則返回下一個值。SQL服務器中的ISNULL行爲

SELECT ISNULL(1,getdate()) 

但上述語句給出錯誤。任何人都可以幫助突出原因嗎?

+4

什麼錯誤是它給? – Mat

+0

這是什麼期望的結果? –

回答

7

從數據類型的日期時間爲INT隱式轉換是不允許的,使所述第一值炭

SELECT ISNULL('1',getdate()) 

順便說一句,只是注意ISNULL不ANSI是proprietery和只接受2個參數,COALESCE接受很多

DECLARE @1 INT,@2 int, @3 INT, @4 int 
SELECT @4 = 6 

SELECT COALESCE(@1,@2,@3,@4) 

下面這種說法是不正確

IsNull函數檢查第一個值如果爲空或空白,則返回下一個值。

它不關心空白

來看,這種

SELECT ISNULL('','A') -- Blank is returned not A 
SELECT ISNULL(NULL,'A') -- A is returned because the first value is NULL 

ISNULL和COALESCE之間的另一個區別是,ISNULL將返回相同的長度作爲第一個參數

運行此

DECLARE @c CHAR(3) 

SELECT ISNULL(@c,'not available') -- not 
SELECT COALESCE(@c,'not available') --not available 
+0

感謝您的信息,但ISNULL是否檢查第二個參數的數據類型,即使它發現第一個值不爲空 –

+2

順便說一句:'coalesce(1,getdate())'確實工作,因爲它轉向另一個方向根據優先級不按第1個參數。 –

+1

關於coalesce和isnull之間的區別的一些細節:http://sqlwithmanoj.wordpress.com/2010/12/23/isnull-vs-coalesce/ – alun

0

我想你是試圖用一個日期替換整數。試試這個SELECT ISNULL(1,2)也許吧。

0

你可以讓它做到這一點,但我真的不會推薦它。這是超級不清楚別人在看這個東西它試圖做的事:

SELECT case when not 1 is null then 1 else getdate() end