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

时间:2014-09-05 13:34:20

标签: postgresql timestamp date-range

是否可以构建一个即时tsrange并检查一个值是否在其中?

我有一个包含两个字段session_startsession_end的表,我想运行一个查询,检查传递的值是否在这两个值之间。沿着这些方向的东西(不是有效的SQL!):

SELECT pk FROM sessions WHERE ? IN [session_start, session_end)

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

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

干杯!

1 个答案:

答案 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, '[)');

注意:对于范围(不是<@),遏制operatorIN