Поведение ISNULL на сервере SQL - PullRequest
2 голосов
/ 17 сентября 2011

Согласно моему пониманию, функция IsNull проверяет первое значение, если оно пустое или пустое, затем возвращает следующее значение.

SELECT ISNULL(1,getdate()) 

, но вышеприведенное утверждение дает ошибку.Может ли кто-нибудь помочь выявить причину?

Ответы [ 3 ]

7 голосов
/ 17 сентября 2011

Неявное преобразование из типа данных datetime в int недопустимо, сделайте первое значение символом

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
0 голосов
/ 17 сентября 2011

Вы можете сделать это для автоматической трансляции, но я действительно не рекомендовал бы это. Для кого-то еще непонятно, что он пытается это сделать:

SELECT case when not 1 is null then 1 else getdate() end
0 голосов
/ 17 сентября 2011

Полагаю, вы пытаетесь заменить целое число датой. Попробуйте вместо этого SELECT ISNULL (1,2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...