台灣最大程式設計社群網站
線上人數
1121
 
會員總數:246101
討論主題:189673
歡迎您免費加入會員
討論區列表 >> MySQL >> 資料庫有開始跟結束時間,查詢條件是一段區間的查詢
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
資料庫有開始跟結束時間,查詢條件是一段區間的查詢
價值 : 50 QP  點閱數:163 回應數:3
樓主

Jimmy
初學者
99 22
364 24
發送站內信

各位高手請問
目前運用是有個公告系統
可以新增多個公告,每個公告有開始時間跟結束時間
比如 A公告 2020-03-01~2020-03-31
B公告 2020-03-15~2020-04-15

使用者查詢條件是要查詢出 2020-02-15~2020-05-10
這段區間內有效的公告有哪些
請問應該SQL怎麼查尋出來呢

搜尋相關Tags的文章: [ 區間的查詢 ] ,
本篇文章發表於2020-08-08 10:58
1樓
我印象中是這樣子

where (起始時間 >= 2020-02-15 and 起始時間 <= 2020-05-10 )
or (結束時間 >= 2020-02-15 and 結束時間 <= 2020-05-10 )
本篇文章回覆於2020-08-08 13:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
嚴格說起來, 期間的重疊有4種狀況(我用一堆0來代替長條圖, 你參考一下就好)

000000222333444555000000000000000000 (要查詢的期間2月~5月)
==================================
有效的重疊部份
000000000333000000000000000000000000 (公告期間在3月份) 要列進來
000111222333000000000000000000000000 (公告期間在1月~3月) 要列進來
000000000333444555666000000000000000 (公告期間在3月~6月) 要列進來
000111222333444555666000000000000000 (公告期間在1月~6月) 要列進來

==================================
沒有重疊的部份(查詢區間外的則是)
000111000000000000000000000000000000 (公告期間在1月份) 忽略
000000000000000000000000888000000000 (公告期間在8月份) 忽略

==================================
所以同一時間要做4種判斷(請務必看清楚 [起始]與[結束])

where (公告起始時間 >= 2020-02-15 and 公告結束時間 <= 2020-05-10 )
or (公告結束時間 >= 2020-02-15 and 公告結束時間 <= 2020-05-10 )
or (公告起始時間 >= 2020-02-15 and 公告起始時間 <= 2020-05-10 )
or (公告起始時間 <= 2020-02-15 and 公告結束時間 >= 2020-05-10 )
本篇文章回覆於2020-08-08 13:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
公告開始時間 <= 指定結束時間 and 公告結束時間 >= 指定開始時間
本篇文章回覆於2020-08-26 11:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.