是否可以构建一个即时tsrange
并检查一个值是否在其中?
我有一个包含两个字段session_start
和session_end
的表,我想运行一个查询,检查传递的值是否在这两个值之间。沿着这些方向的东西(不是有效的SQL!):
SELECT pk FROM sessions WHERE ? IN [session_start, session_end)
我不确定文字tsrange
的确切syntex以及如何检查包含(IN
似乎不起作用。
请注意,传递的值以及session_start
和session_end
都是TIMESTAMP
字段/值。
干杯!
答案 0 :(得分:5)
是的,您可以使用range constructor:
SELECT rangetype(lower, upper[, bounds]);
-- bounds can be '[]', '[)' (default), '(]', '()'
-- in your case:
SELECT pk FROM sessions WHERE ? <@ tsrange(session_start, session_end, '[)');
注意:对于范围(不是<@
),遏制operator为IN
。