PostgreSQL找到空白行

时间:2016-10-14 16:08:46

标签: sql postgresql

我想从'currentsheet'中搜索非null值,但是有些字段实际上是空白而不是null。我如何使用postgreSQL找到空白字段,因为下面没有工作,仍然在'currentsheet'字段下显示空白值。

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

2 个答案:

答案 0 :(得分:1)

您需要使用AND来检查_http_requests.currentsheet。如果是NULL,那么<> ''检查将始终如此,反之亦然。

作为一个更简单的示例,您可以使用不带表的select语句来帮助调试此类事物(来自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奇怪 - select null = null;导致null)。让我们看看当我们用or替换and时会发生什么:

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 <> ''时,falseX''时,我们会null

所以用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;

答案 1 :(得分:0)

我认为你只需要AND _http_requests.currentsheet <> ''。 AND很重要,因此我们排除了两者。