Postgresql
根據開始停止列從表行中獲取日期間隔
我有一個返回以下結果集的表:
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'
,您不是:select ( select startstop from mytable where mydate = '2017-02-07' and startstop = 'start' or mydate < '2017-02-07' order by mydate desc limit 1 ) = 'start' as result ;
複雜
WHERE
的是處理包含的日期範圍。如果使用包含-排他,則條件會更簡單。類似的方式 - 也許更清楚一點 - 將是:
with ct as ( select mydate, startstop from mytable where mydate <= '2017-02-07' order by mydate desc limit 1 ) select ('start') = (select startstop from ct) or ('2017-02-07', 'stop') = (table ct) as result ;