2016-10-14 1 views
0

正常に動作する 'currentsheet'から非null値を検索したいのですが、実際にはnullではなく空白のフィールドがあります。 postgreSQLを使用して空のフィールドを見つける方法はありますが、これはうまくいかず、「カレントシート」フィールドの下に空白の値が表示されます。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

あなたは_http_requests.currentsheetをチェックするANDを使用する必要があります。 NULLの場合は、<> ''チェックの場合は常に真となり、逆の場合は真となります。

方法単純な例として、あなたは(psqlまたは任意のSQLクエリツールあなたが好きから)この種のもののデバッグを支援するために、テーブルずにSELECT文を使用することができます。

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になるためです)。我々はandorを交換するときに何が起こるか見てみましょう:

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 <> ''の場合、X''またはnullの場合、falseとなります。

だから、フレーズへの道は、あなたが実際に欲しいものを行うにはselect文は次のとおりです。私はあなただけAND _http_requests.currentsheet <> ''が必要

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は重要なので、両方を除外します。

関連する問題