SQL Server中的ISNULL行为

Ish*_*ech 2 sql-server date isnull

根据我的理解,IsNull函数检查第一个值,如果它为null或空白,则返回下一个值.

SELECT ISNULL(1,getdate()) 
Run Code Online (Sandbox Code Playgroud)

但上述陈述给出了错误.任何人都可以帮助突出原因吗?

SQL*_*ace 7

不允许从数据类型datetime到int的隐式转换,将第一个值设为char

SELECT ISNULL('1',getdate())
Run Code Online (Sandbox Code Playgroud)

顺便说一句,请注意,ISNULL不是ANSI的专属,只接受2个参数,COALESCE接受更多

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

SELECT COALESCE(@1,@2,@3,@4)
Run Code Online (Sandbox Code Playgroud)

以下声明不正确

IsNull函数检查第一个值,如果它为null或为空,则返回下一个值.

它不关心空白

跑这个

SELECT ISNULL('','A')    -- Blank is returned not A
SELECT ISNULL(NULL,'A')  -- A is returned because the first value is NULL
Run Code Online (Sandbox Code Playgroud)

ISNULL和COALESCE之间的另一个区别是ISNULL将返回与第一个参数相同的长度

跑这个

DECLARE @c CHAR(3)

SELECT ISNULL(@c,'not available')  -- not
SELECT COALESCE(@c,'not available') --not available
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句:`coalesce(1,getdate())`确实有效,因为它根据优先级而不是根据第一个参数反向投射. (2认同)