2

根据我的理解 IsNull 函数检查第一个值是否为空或空白,然后返回下一个值。

SELECT ISNULL(1,getdate()) 

但上面的语句给出了错误。任何人都可以帮助突出原因吗?

4

3 回答 3

7

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

SELECT ISNULL('1',getdate())

顺便说一句,请注意 ISNULL 不是 ANSI 是专有的,只接受 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
于 2011-09-17T15:03:16.270 回答
0

我猜您正在尝试用日期替换整数。试试这个 SELECT ISNULL(1,2) 也许代替。

于 2011-09-17T15:04:13.290 回答
0

你可以让它自动播放,但我真的不推荐它。其他人非常不清楚它正在尝试做什么:

SELECT case when not 1 is null then 1 else getdate() end
于 2011-09-17T15:15:45.573 回答