我想从'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
答案 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 <> ''
时,false
为X
或''
时,我们会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很重要,因此我们排除了两者。