SQL은 작동하지 않는 진술을 좋아하지 않습니다
문제
저장된 절차 내에 다음 코드가 있습니다.
WHERE
WPP.ACCEPTED = 1 AND
WPI.EMAIL LIKE '%@MATH.UCLA.EDU%' AND
(WPP.SPEAKER = 0 OR
WPP.SPEAKER IS NULL) AND
WPP.COMMENT NOT LIKE '%CORE%' AND
WPP.PROGRAMCODE = 'cmaws3'
비슷한 진술은 작동하지 않습니다. 그렇지 않으면 누군가가 코어를 포함하지 않는 주석 열이있는 항목이 있고 다른 모든 열은 괜찮습니다.
이것에 무엇이 잘못되었는지 아는 사람이 있습니까?
해결책
만약에 WPP.COMMENT
포함 NULL
, 조건이 일치하지 않습니다.
이 쿼리 :
SELECT 1
WHERE NULL NOT LIKE '%test%'
아무것도 돌려주지 않을 것입니다.
a NULL
열, 둘 다 LIKE
그리고 NOT LIKE
검색 문자열이 반환됩니다 NULL
.
귀하의 의견으로는 반환해야 할 행의 관련 값을 게시 해 주시겠습니까?
다른 팁
특정 주석 열의 값이 NULL입니까?
때로는 마음에 들지 않으면 널 주위에 올바르게 행동하는 방법을 모릅니다.
방금 같은 문제를 발견하고 해결했지만이 게시물을 찾기 전에는 그렇지 않았습니다. 그리고 당신의 질문이 실제로 대답하지 않은 것처럼 보았을 때, 여기 내 해결책이 있습니다 (희망적으로 당신을 위해 일할 것입니다. 다른 사람이 내가 한 것과 같은 일을 찾고 있습니다.
대신에;
... AND WPP.COMMENT NOT LIKE '%CORE%' ...
노력하다;
... AND NOT WPP.COMMENT LIKE '%CORE%' ...
기본적으로 내가 평가 한 필드의 다른 쪽 "이 아닌"을 움직여서 나를 위해 일했습니다.
이걸 만나요, 대답은 간단합니다. ISNULL
. 테스트중인 필드에 텍스트 비교 검색을 수행 할 때 값 (일부 레코드에서)이없는 경우 SQL은 행을 반환하지 않습니다.
WHERE wpp.comment NOT LIKE '%CORE%'
그래서 당신은 일시적으로 가치를 대체했습니다. null
(빈) 사용하여 레코드 ISNULL
명령, 예를 들어
WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'
그러면 널이있는 모든 레코드를 표시하고 일치하는 기준이있는 모든 레코드를 생략합니다. 당신이 원한다면, 당신은 당신이 기억하는 데 도움이되는 쉼표에 무언가를 넣을 수 있습니다.
WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'
Mattgcon,
"좋아하지 않는"라인과 동일한 SQL을 실행하면 더 많은 행을 얻을 수 있습니까? 그렇지 않은 경우 데이터를 확인하십시오. 귀하의 질문에서 언급 한 것을 알고 있지만 실제 SQL 문이 해당 조항을 사용하고 있는지 확인하십시오. Null이있는 다른 답변도 좋은 생각입니다.