2017-09-14 177 views
0

我想創建一個SQL語句,通過篩選日期範圍的同一行中的多個日期字段來選擇記錄任何日期字段屬於提供的開始或結束數據,那麼它應該從下面的表中顯示 實際上,我打算在Crystal中編寫SQL命令,因此StartDate和EndDate以及Country和City的值將提供給此SQL語句。所以,此時此刻不要擔心水晶報告。它只是如何在SQL Select語句中處理這個問題? 任何想法???SQL來選擇範圍內的多個日期字段

參數爲:起始日期和結束日期,國家和/或城市

SQL:

Select * from Table where 
ActualStart in StartDate and EndDate 
Or 
ActualEnd in StartDate and EndDate 
or 
ProjectedStart in StartDate and EndDate 
or ProjectedEnd in StartDate and EndDate 
AND 
County = CountyParam AND (if Not Null(CityParam) then City = CityParam) 

DATA:

WORKID Country CITY  Cost ActualStart ActualEnd ProjectedStart ProjectedEnd 
18112 US  BOSTON 0  NULL   NULL  4/25/2017  NULL 
18181 US  BOSTON 566.76 6/1/2016  6/6/2017 6/6/2017  NULL 
18183 GERMANY STUTTGART 0  NULL   NULL  6/6/2017  NULL 
18184 GERMANY MUNICH  0  NULL  6/6/2017 6/6/2017  NULL 
18185 INDIA HYDERABAD 0  4/1/2015  NULL  7/6/2017  NULL 
18186 CANADA TORONTO 0  NULL   NULL  4/6/2017  NULL 
18187 CANADA TORONTO 0  1/1/2016  NULL  3/6/2017  NULL 
18188 CANADQ CALGARY 0  NULL   NULL  6/6/2017 6/6/2018 
18189 US  BOSTON  0  NULL   NULL  6/6/2017  NULL 
18190 US  CHICAGO 1429.76 NULL  6/7/2017 6/7/2017  NULL 
18191 US  NEWYORK 0  NULL   NULL  8/7/2017  NULL 
+1

只是用'BETWEEN'即'WHERE(ActualStart BETWEEN起始日期日期和結束日期)或(ActualEnd之間的起始日期日期和結束日期)或...' –

+0

如果起始日期或結束日期可以爲NULL,使用COALESCE(起始日期,「1900- 01-01')爲EndDate的StartDate和COALESCE(EndDate,'2100-01-01')。 –

+0

似乎有點奇怪。你是否打算排除長期運行的物品?在請求的開始日期之前的開始日期和在請求的結束日期之後的結束日期。 – Mic

回答

0

謝謝你的答案 我能解決這個問題通過使用語法和合並函數,然後最後使用Date參數(From和To Dat)向Crystal添加SQL命令E)。 對於處理Country和City的邏輯,我使用Crystal中的Select記錄將此語句添加爲以前的SQL語句的結束語句。現在它工作正常。 感謝