检查时间戳是否在tsrange范围内

Chr*_* P. 2 postgresql timestamp date-range

是否有可能在运行中构建tsrange并检查值是否在其中?

我有一个有两个字段的表,session_startsession_end我要运行检查,如果通过数据为这两个值之间的查询.沿着这些方向的东西(不是有效的SQL!):

SELECT pk FROM sessions WHERE ? IN [session_start, session_end)
Run Code Online (Sandbox Code Playgroud)

我不确定文字的确切syntex tsrange以及如何检查包含(IN似乎不起作用).

请注意,传递的值以及session_startsession_end都是TIMESTAMP字段/值.

干杯!

poz*_*ozs 5

是的,您可以使用范围构造函数:

SELECT rangetype(lower, upper[, bounds]);
-- bounds can be '[]', '[)' (default), '(]', '()'

-- in your case:
SELECT pk FROM sessions WHERE ? <@ tsrange(session_start, session_end, '[)');
Run Code Online (Sandbox Code Playgroud)

:遏制运营商<@为范围(不IN).