2017-09-11 60 views
1

找我得到的數據開始日期和結束日期得到的開始日期和結束日期

之間的數據之間的數據,但我的要求是有點不同,請檢查下面的數據庫

我有兩個文本boxs

1) start date 
2) end date 

數據庫是這樣

table name->purchase_order 

    sno  start_date   end_date 
    1  2017/08/01   2017/12/01 
    2  2017/08/01   2017/11/30 
    3  2017/09/01   2017/09/30 
    4  2017/09/01   2017/10/30 
    5  2017/10/01   2017/11/30 

我想這樣的

select * 
from purchase_order 
where start_date>= '2017/09/01' and start_date<= '2017/09/01' 
     OR end_date>= '2017/09/01' and end_date<= '2017/09/01' 

輸出我得到

sno  start_date  end_date 
3  2017/09/01   2017/09/30 
4  2017/09/01   2017/10/30 

什麼,我需要

,如果我這個2017年9月1日之間進行選擇 - 2017年9月30日我想出來把這樣{在ID 「1」,在8月至12月間有9個月是有那麼它也有前來}

sno  start_date   end_date 
1  2017/08/01   2017/12/01 
2  2017/08/01   2017/11/30 
3  2017/09/01   2017/09/30 
4  2017/09/01   2017/10/30 

感謝

+0

你能解釋爲什麼當你只有2個輸入源時你有4個子句嗎? – Eli

+0

你可以使用'BETWEEN'。 – Qirel

回答

1

而不是檢查列值是否在您的日期之間,您希望查看您的日期是否在列值之間。使用BETWEEN使得邏輯看起來乾淨了一點:

select * from purchase_order where '2017/09/01' BETWEEN start_date AND end_date 

如果選擇2017/09/01 - 2017/09/30,那麼這樣做:

select * from purchase_order where '2017/09/01' BETWEEN start_date AND end_date AND '2017/09/30' BETWEEN start_date AND end_date 

AND將確保這兩個日期start_date和end_date之間,OR將確保在至少有一個日期在列之間。

0

你不會希望有4個條款,你在你的問題有,你想有隻2
邏輯應該如下:

  1. 從輸入開始日期應用程序在你的桌子
  2. 從輸入中應用較早或等於到底列結束日期在

申請截止日期後或等於起始列的開始日期。

基於這個邏輯,你應該能夠使用以下查詢:

SELECT 
    * 
FROM purchase_order 
WHERE start_date<= '2017/09/01' -- start date input 
AND  end_date<= '2017/09/01' -- end date input 

一個可能會抱怨我有我的邏輯孔由於我沒有請檢查結束日期晚於開始日期,儘管您希望在應用程序級別執行此操作,因此它與提出此問題的數據庫級別無關。

相關問題