2010-07-02 30 views
2

我正在使用Access 2003.在這樣的文本數據列中有一個包含某些日期值的表;訪問數據轉換問題

May-97 
Jun-99 
Jun-00 
Sep-02 
Jan-04 

我需要將其轉換爲正確的日期格式,到另一個日期/時間列,因此,創建一個新的日期/時間列和剛剛更新從文本列中的值到這個新列。起初它看起來很好,除了2000年以後的幾年。新的列將日期轉換爲如下;

May-97 > 01/05/1997 
Jun-99 > 01/06/1999 
Jun-00 > 01/06/2000 
Sep-02 > 01/09/2010 
Jan-04 > 01/01/2010 

正如你可以看到任何一年的數據在2000年以後得到轉換至2010年,如果我查詢中使用的格式(dateString「DD/MM/YYYY」)的數據同樣的事情發生。

任何想法,爲什麼這是這樣嗎?我是否必須分月份和年份再次合併它們?

感謝

回答

2

Access/Jet/ACE(以及許多其他Windows組件)使用一個窗口來解釋2位數年份。對於00至29,假設爲2000至2029年,以及30至99年,1930至1999年。這是爲了在1997 - 98年的時間框架內解決Y2K兼容性問題。

我不允許在任何應用程序的任何位置輸入2位數的年份。因此,我不必有任何代碼來解釋用戶的意圖(可能會犯錯誤)。

這也指出了使用Jet/ACE日期值顯示格式和數據存儲的獨立性問題。存儲爲雙精度型,整數部分表示自12/30/1899以來的一天,小數部分表示一天內的時間部分。您輸入的任何日期將被存儲爲只有一個數字。

如果您輸入的日期不完整(即沒有明確指出年份的世紀),您的應用程序必須對用戶的意圖做出假設。 2029窗口是解決2位數年份問題的一種解決方案,但在我看來,依靠它是完全不合適的,因爲用戶可以在控制面板區域設置中更改它。我不寫任何複雜的代碼來驗證日期,我只需要輸入4位數的年份並完全避免該問題。自從c以來我一直這樣做。 1998年是理所當然的,每個人都完全習慣於它。當時一些用戶大聲疾呼,而且我把「這是因爲Y2K」作爲關閉他們的藉口。一旦他們使用它,它就成了一個沒有問題的問題。

0

訪問似乎MM-YYYY格式MM-DD格式之間得到conduced。不知道爲什麼它會在2000年之後的日期做它,但通過將原始字符串日期轉換爲完整日期(01年5月1日)來解決它。現在,Access將年份轉換爲2001年而不是2010年。

1

日期不明確,所以它將02看作日期編號。根據您所在地區,這樣的事情可能適合:

cdate("01-" & Field) 

但是,它可能是最好的轉換爲四位數的年,月,日的格式,這始終是明確的。

+0

我明白你的意思,但是否需要將最後2位數字作爲年份或日期,期望Access始終以單向方式進行操作。但它選擇一些記錄作爲年份和其他作爲日期。因此混亂。 – Sivakanesh 2010-07-03 21:43:59

+0

Remou,只是要挑剔我建議你在你的帖子前添加「四位數字」。 – 2010-07-04 03:58:34

+0

@Tony Toews,完成。 @Sivakanesh從某種意義上說,這個規則是一致的,如果該數字小於或等於該月份的天數,則將被解釋爲一天,否則爲一年。也許有一點「2000年」問題也出現了。 – Fionnuala 2010-07-04 08:45:02

0

如果您不提供一年,並且輸入日期字段的兩組數字可能是一個日期和月份,那麼Access將假定當前年份。所以你的前三個日期肯定有一年。但最後兩個沒有。

請注意,這不是Access,而是實際操作系統。你在Excel中得到相同的結果。在這個問題上,我與一些微軟員工進行了一次有趣的對話,實際上是OLEAUT32.DLL。