Я только что натолкнулся на интересную проблему с процедурой, которую я пишу в SQL.
В моем процедуре у меня есть 2 даты, которые являются необязательными параметрами по умолчанию, равными NULL. Я хочу проверить, не являются ли эти параметры ненулевыми, и если не запустить часть моего процесса, если они нулевые, то дополнительная часть процесса игнорироваться.
Я сделал довольно простой оператор IF(@dateVariable <> NULL AND @DateVariable2 <> NULL)
, но оператор if никогда не работает, даже если переменные не равны NULL, я бы предположил, что SQL пытается сравнить дату с NULL, что странно, поскольку datetime обнуляется.
Чтобы обойти это, я просто сделал IF(DateVariable IS NOT NULL)
, который работает правильно. Я также попробовал IF( ISNULL(@DateVariable,'') <> '')
, который также работает правильно
Итак, мой вопрос: почему первый IF не работает, а второй и третий IF оба работают, так как оба должны в какой-то момент сравнить содержимое переменной с нулем?
Пример:
----- Сбой -----
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date <> NULL)
BEGIN
print('a')
END
----- Работает -----
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (ISNULL(@Date,'') <> '')
BEGIN
print('a')
END
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date IS NOT NULL)
BEGIN
print('a')
END