查询Postgres中的空白时间范围

时间:2017-06-23 18:54:53

标签: sql postgresql

我最近发现时间范围可以是empty,与null字段相比似乎有所不同。

db=# select tstzrange(now(), now());
 tstzrange
-----------
 empty
(1 row)

db=# select tstzrange(now(), now()) is null;
 ?column?
----------
 f
(1 row)

如何为查询匹配empty字段?

2 个答案:

答案 0 :(得分:5)

将其与字符串'empty'

进行比较
select tstzrange(now(), now()) = 'empty' as out

产生:

 out
-----
 t

对于带有查询的非空结果,如:

select tstzrange(now(), now() + interval '1d') = 'empty' as out

它始终如一地产生:

 out
-----
 f

事实上'empty'::tstzrange的隐式转换发生了。

documentation

中详细了解此事

答案 1 :(得分:1)

使用isempty()

select isempty(tstzrange(now(), now())); -- true
select isempty(tstzrange(now(), now() + interval '1d')); -- false