我有一个返回以下结果集的表:
mydate | startstop
------------+----------
2018-02-07 | start
2018-02-14 | stop
2017-02-06 | start
2017-02-12 | stop
2016-02-05 | start
2016-02-12 | stop
我需要知道我的当前日期是否在其中一个时间间隔内,例如,如果我从当前日期查询表'2017-02-07'
,我需要获取'TRUE'
.
我知道它看起来很简单,但它并不简单!
我发现的最好的是:
select true
where '2017-02-06'>=
(select mydate from mytable where starstop='start' order by id limit 1)
and '2017-02-06' <=
(select mydate from mytable where startstop='stop' order by id limit 1);
如果日期在每个间隔之一中,它会返回TRUE
,但前提是表格在未来没有间隔,正如您所看到的,我的表格在未来有间隔。
注:数据库管理系统为PostgreSQL 9.1
其实很简单。从想要的日期开始,按日期向下排列,直到找到第一行。如果是,
'start'
那么你就在一个区间内。如果是'stop'
,则您不是:复杂
WHERE
的是处理包含的日期范围。如果使用 inclusive-exclusive,条件会更简单。类似的方式——也许更清楚一点——是:
所以看起来您需要将其转换为如下所示的内容:
在那之后,你可以做一个看起来像的查询
这可能需要某种游标来解析并匹配开始和停止日期以建立您的间隔。