2017-06-23 162 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'類型的隱式轉換。 –