2017-06-23 119 views
0

我最近发现时间范围可能是empty,它似乎与null字段不同。查询Postgres中的空时间范围

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

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

如何匹配empty字段进行查询?

out 
----- 
t 

而对于一个非空的结果与查询关键词,比如:

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

它一贯生产:

回答

3

用绳子'empty'

select tstzrange(now(), now()) = 'empty' as out 

产生比较它

out 
----- 
f 

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

查看更多关于此事的信息documentation

+0

太棒了!谢谢! 我很好奇它为什么这样工作,一个'tstzrange'类型的eval怎么能对一个字符串''empty''? – user5038859

+0

看看它是如何实现的:https://www.postgresql.org/docs/current/static/rangetypes.html#RANGETYPES-IO 有一个'empty''到'tstzrange'类型的隐式转换。 –