2016-10-14 4 views
0

잘 작동하는 'currentsheet'에서 null이 아닌 값을 검색하려고하지만 일부 필드는 null이 아닌 실제로 비어 있습니다. PostgreSQL을 사용하여 빈 필드를 찾을 수있는 방법은 무엇입니까? 'currentheet'필드 아래에 여전히 공백 값이 표시됩니다. _http_requests.currentsheet을 확인PostgresSQL은 빈 행을 찾습니다.

SELECT * 
     FROM PUBLIC._http_requests 
     WHERE (_http_requests.currentsheet IS NOT NULL OR _http_requests.currentsheet <> '') 
       AND _http_requests.session_id IS NOT NULL 
       AND _http_requests.http_referer IS NOT NULL 

답변

1

당신은 AND를 사용해야합니다. NULL 인 경우 <> '' 수표의 경우 항상 true이고 그 반대의 경우도 마찬가지입니다.

는 방식으로 간단하게 예를 들어, 당신은 (당신이 좋아하는 psql 또는 어떤 SQL 쿼리 도구에서) 이런 종류의 물건을 디버깅 할 수 있도록 테이블없이 선택 문을 사용할 수 있습니다

select ('' is not null or '' <> '') as empty_result, 
     (null is not null or null <> '') as null_result; 

empty_result | null_result 
--------------+------------- 
t   | 

을 문자열이 '' 경우, 당신은 true이됩니다. 문자열이 null 인 경우 null이 표시됩니다 (null과의 비교는 SQL oddies - select null = null; 결과가 null). 우리가 and으로 or를 교체 할 때의이 어떻게되는지 보자

select ('' is not null and '' <> '') as empty_result, 
     (null is not null and null <> '') as null_result; 

empty_result | null_result 
--------------+------------- 
f   | f 

깔끔한! X is not null and X <> ''의 경우 이 '' 또는 null 일 때 false이됩니다.

그래서 문구 당신이 실제로 원하는 것을 할 수있는 select 문으로가는 길입니다

SELECT * 
    FROM PUBLIC._http_requests 
    WHERE _http_requests.currentsheet IS NOT NULL 
    AND _http_requests.currentsheet <> '' 
    AND _http_requests.session_id IS NOT NULL 
    AND _http_requests.http_referer IS NOT NULL; 
0

내가 방금 AND _http_requests.currentsheet <> ''을 필요가 있다고 생각합니다. AND는 둘 다 배제 할 수 있도록 중요합니다.

관련 문제