복붙노트

[SQL] 왜 이런 식으로 널 행동은 SQL 날짜 변수를 비교합니까?

SQL

왜 이런 식으로 널 행동은 SQL 날짜 변수를 비교합니까?

난 그냥 SQL에서 쓰고있는 절차와 흥미로운 문제를 건너 왔어요.

내 PROC에서 내가 선택 PARAMS이 NULL이 기본값이 날짜를 가지고, 나는이 PARAMS가 null없는 내 PROC의 일부를 실행하지 않을 경우가 null의 경우 다음 시저의 추가 부분은 무시되어 있는지 확인하고 싶습니다.

나는 상당히 기본적인 IF (@dateVariable <> NULL AND @ DateVariable2 <> NULL) 문을했다,하지만 if 문은 변수가 null가 아닌 경우에도, 나는 SQL 인 NULL에 날짜를 비교하는 데 어려움을 겪고 있다고 가정하지 않을 것이다 작품 결코 날짜 이후 이상은 널 (NULL)입니다.

이 난을 해결하기 위해 단지 IF는 (DateVariable가 NULL이) 제대로 작동하는했다. 또한 이는 또한 올바르게 작동 ( ''<이>) '', ISNULL (@DateVariable) IF 시도

내 질문은 왜 첫 번째 IF하지 작업을 수행하지만, 두 번째와 세 번째 어떤 점에서 모두 필수가 null로 변수의 내용을 비교하기 때문에 모두가 할 경우?

예:

----- 실패 -----

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

해결법

  1. ==============================

    1.간단히 말해 'NULL'은 'NULL'동일하지 않습니다. 'NULL'은 불확실한되는 한 가지가 반드시 또한 불확실하다 다른 동일한 일을하지 않는 불확실성의 상태와 비교합니다. 널 (null)에 대한 테스트 할 때 사용은 'ISNULL ()', 또는 'COALESCE ()' 'NULL IS'. '오프'로 ANSI_NULLS 설정하면이 동작을 변경할 수 있지만 그것은 ANSI SQL 표준을하지 않습니다 수 있습니다. 추가 정보를 원하시면 http://msdn.microsoft.com/en-us/library/ms191270.aspx를 참조하십시오.

    간단히 말해 'NULL'은 'NULL'동일하지 않습니다. 'NULL'은 불확실한되는 한 가지가 반드시 또한 불확실하다 다른 동일한 일을하지 않는 불확실성의 상태와 비교합니다. 널 (null)에 대한 테스트 할 때 사용은 'ISNULL ()', 또는 'COALESCE ()' 'NULL IS'. '오프'로 ANSI_NULLS 설정하면이 동작을 변경할 수 있지만 그것은 ANSI SQL 표준을하지 않습니다 수 있습니다. 추가 정보를 원하시면 http://msdn.microsoft.com/en-us/library/ms191270.aspx를 참조하십시오.

  2. ==============================

    2.NULL 비교 검색 조건을 참조하십시오

    NULL 비교 검색 조건을 참조하십시오

  3. from https://stackoverflow.com/questions/9004570/why-does-comparing-a-sql-date-variable-to-null-behave-in-this-way by cc-by-sa and MIT license