2012-02-22 65 views
0

需要選擇,這將是在開始日期和結束日期之間的給定日期的量值在MS Access查詢不retriving與日期時間

對我來說它的工作很好,當我使用「2/27/2012 「或‘2012/2/28’

但對於‘2012/2/29’它不選擇量

select amount from tblPricePeriod where cdate(2/1/2012) <=cdate('2/29/2012 12:00:00 AM') 
and cdate(2/29/2012) >= cdate('2/29/2012 12:00:00 AM') 

tblpriceperiod

+3

那是*正是*你有什麼? 'cdate(2/1/2012)'是將'2/1/2012'分割成一個給出'00:01:26'的日期(因爲沒有引號),但這會導致FALSE任何候選日期..也可以使用'#2/29/2012 12:00:00 AM#'而不是'cdate('2/29/2012 12:00:00 AM')' – 2012-02-22 19:27:44

+0

有沒有在那個SQL語句中,列引用是cdate是一個轉換函數,但是你已經針對一個類型化的值運行它,而不是表中的字段,這個查詢並不意味着什麼,你能否澄清這個問題? – 2012-02-23 09:38:24

回答

2

不知這個查詢可能會接近你想。

PARAMETERS WhichDate DateTime; 
SELECT amount 
FROM tblPricePeriod 
WHERE 
     [WhichDate] >= StartDate 
    AND [WhichDate] <= EndDate; 

如果你不想做它作爲一個參數查詢,而是創建一個文本日期值的查詢,而不是,嘗試像這樣...

SELECT amount 
FROM tblPricePeriod 
WHERE 
     #2012-02-29# >= StartDate 
    AND #2012-02-29# <= EndDate; 

另一種選擇是在WHERE子句中使用BETWEEN表達式。

SELECT amount 
FROM tblPricePeriod 
WHERE #2012-02-29# BETWEEN StartDate AND EndDate; 

這些建議假設StartDate和EndDate都是日期/時間數據類型。如果它們是文本數據類型,則可以使用該CDate()函數在查詢中使用它們的日期等效項。

CDate(StartDate) 
CDate(EndDate) 

此外,如果您的StartDate和EndDate值包含午夜以外的時間組件,情況會更加複雜。但是,您可以使用DateValue()函數在相同日期將這些日期/時間值轉換爲午夜。

DateValue(StartDate) 
DateValue(EndDate) 

DateValue(CDate(StartDate)) 
DateValue(CDate(EndDate))