2009-09-10 71 views
1

我們正在嘗試進行查詢,以便用戶輸入日期,並且查詢會根據該日期提取所有記錄。在查詢的設計視圖中,我們已經在條件中嘗試了[輸入日期],但它不會拉,因爲它會匹配日期而不是時間。我已經看到很多使用##標記格式的日期來忽略時間,但我不知道如何將它納入我們的查詢。MS Access選擇具有變量的記錄

編輯:是的,我們正在使用默認爲日期/時間字段的Access。

我們很不耐煩,只打算做一個範圍,迫使用戶輸入兩個日期。老實說,它需要處理兩個問題,但這是Access的一個令人沮喪的問題。

+0

對不起,我的解決方案沒有工作。還有一種方法可以讓它只用一個用戶輸入。在查詢數據之前,通過輸入框將日期加入,並將其添加到您的SELECT指令中。你可以用記錄集或查詢對象來做到這一點。 – 2009-09-11 09:19:19

回答

2

因此,您在數據庫中有時間戳,您想通過單一日期查詢?

有兩種方法可以做到這一點:

1)剝下時間部分的數據庫字段

SELECT * 
    FROM Table 
WHERE DateValue([DateField]) = [Enter Date] 

,這不是很好的表現明智,但確定爲小桌子

2 )您添加時間到您的輸入日期和使用之間哪個更好的性能明智

SELECT * 
    FROM table 
WHERE [DateField] BETWEEN [Enter Date] AND [Enter Date] + #23:59:59# 
+0

thx - 已更新 – 2009-09-10 16:45:49

+0

謝謝,不幸的是它沒有返回任何記錄 – Terry 2009-09-10 17:17:15

+0

@DJ:你認爲[Enter Date]的值也可能有一個不是午夜的時間元素?我認爲在添加#23:59:59#之前,您應該將[輸入日期]值舍入到午夜。 – onedaywhen 2009-09-11 11:23:46

2

我猜你的數據基本上是以dateTime格式輸入的。在這種情況下,您應該在datevalue(myDateField)上構建查詢,而不是在myDateField上構建它。您的查詢,然後將看起來像(在SQL窗口)

SELECT * From MyTable WHERE dateValue(myDateField) = [enter date here] 

,而不是

SELECT * From MyTable WHERE myDateField = [enter date here] 
+0

謝謝,不幸的是它沒有返回任何記錄 – Terry 2009-09-10 17:16:23

2

我會調整DJ的建議有關BETWEEN,因爲我認爲它的工作原理我的方式從來沒有完全信任d喜歡它(爲第二個值增加1秒的原因是因爲第二個值包含在BETWEEN範圍內,這對我來說一直是違反直覺的)。

無論如何,我的建議是:

這還不是全部,不同的,但它避免了添加適量的BETWEEN第二個參數的問題。如果不使用DateAdd()DateDiff(),我總是謹防嘗試日期/時間的數學運算。

定義參數也是一個好主意,因爲如果用戶輸入無效日期,他們會得到一個有用的錯誤消息,而不是錯誤的結果。