2013-01-01 160 views
1

我在MS ACCESS 2010中遇到了一個奇怪的問題。
我有一個表RawData,列TaskDate(格式是Memo)。當我使用下面的查詢我得到所需的數據,
ms access 2010年無法獲得數據

`select * from RawData where TaskDate between '01/01/2012' and '12/31/2012'` 

但是當我使用下面的查詢,我沒有得到任何數據:

select * from RawData where TaskDate between '01/01/2012' and '01/01/2013' 

我不明白的問題,數據比較沒有發生在這個「年」值上。請幫助這個

回答

0

哦,老兄。你意識到這有多糟糕?不幸的是,「不知道如何使用數據庫」風格。閱讀數據類型文檔的時間。

好了,我們開始吧:

TaskDate(格式備註)

是的,但是確實應該公開鞭笞。首先,這是一個TEXT字段,其次是LONG文本的日期永遠不會。兩級失敗。

如果格式是備忘錄它是文本,所以「之間」比較文本。

'01/01/2012' 和'12/31/2012'`

被左到右。

即第一個字母0或1,第二個字母1或2,0和3之間第四信,1和1之間第五信那張...

'01/01/2012' 和'01/01/2013'

這基本上意味着2012年和2013年01/01的所有內容。假設這是一個假期,沒有任務 - 好吧,沒有數據。爲什麼?因爲任何其他日期都失敗。首字符必須匹配'01/01/201'。

如果您想要這樣做呢得當,您可以:

  • 修改日期的格式是有意義的文本。這是ISO標準:2012年1月1日至2012年12月31日。這意味着他們在從左到右的順序時是正確的。

  • 更好:轉儲愚蠢的主意,用備忘錄的日期

http://www.dummies.com/how-to/content/tips-for-choosing-field-types-in-access-2010.html

然後使用日期/時間的字段類型,並奇蹟般地訪問不會嘗試比較文本(它不知道它們在內部意味着什麼,所以它不能將日期的語義應用於它們)並比較真正的日期。

現在你確定沒有「日期」比較。它是純粹的愚蠢的小字符串,從左到右,逐個字符,沒有額外的邏輯。

+0

感謝您的幫助!我真的很陌生,所以你可能會發現我的帖子非常新手..我已經改變了格式,並使用下面的查詢來獲得結果....... select * from RawData其中TaskDate在#1/1之間/ 2012#和#1/1/2013#。現在得到結果 –