NULL vs. `infinity` in PostgreSQL range types

走远了吗. 提交于 2019-12-01 05:08:48

问题


What is the meaning of 'infinity' in PostgreSQL range types? Is there any difference between specifying infinity or -infinity as a bound, or NULL? I.e. is infinity an explicit form of specifying that the range bound is infinite, whereas NULL would implicit specify an infinite bound range?

See the following examples:

SELECT tstzrange('-infinity','infinity') && tstzrange(NULL, NULL);
 ?column?
----------
 t

SELECT tstzrange('2013-01-01 00:00:00+01', '2013-02-01 00:00:00+01')
    && tstzrange(NULL, '2013-03-01 00:00:00+01');
 ?column?
----------
 t

SELECT tstzrange('2013-01-01 00:00:00+01', '2013-02-01 00:00:00+01')
    && tstzrange('-infinity', '2013-03-01 00:00:00+01');
 ?column?
----------
 t

回答1:


NULL does the same thing for the overlap operator && as -infinity or infinity, respectively. I quote the manual here:

Using NULL for either bound causes the range to be unbounded on that side.

But as value, NULL is still distinct from 'infinity'!

SELECT tstzrange('-infinity','infinity') = tstzrange(NULL, NULL);

Returns FALSE (not NULL, mind you!).

More in this SQLfiddle.



来源:https://stackoverflow.com/questions/15578050/null-vs-infinity-in-postgresql-range-types

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!