2010-09-21 142 views
0

我將與datetime列select語句的MS Access

讓我們用數據01/01/2001命名TmStamp 01表:00:PM

還有另一個日期列,讓我們的名字它用數據RegDate 01/01/2001

我想選擇具有該日期的數據。

所以我寫

SELECT * FROM TABLE WHERE RegDate>=#01/01/2001# and RegDate<=#01/01/2001# 

我得到的數據01/01/2001。

然而,

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001# and TmStamp <=#01/01/2001# 

我什麼也沒得到

我將只得到,如果我做這樣的數據01/01/2001 ..

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001# and TmStamp <=#02/01/2001# 

日期是在DD/MM/YYYY格式。

任何想法爲什麼是這樣?

+0

它看起來像TmStamp具有時間分量 – MikeAinOz 2010-09-21 02:49:27

+0

boht TmStamp和RegDate的日期/時間格式 – william 2010-09-21 03:08:28

回答

1

在MS Access中,日期/時間字段總是有一個時間部分。該REGDATA場有時間的00:00:00這樣的訪問是不是顯示你和下面的查詢將工作

SELECT * FROM TABLE WHERE RegDate>=#01/01/2001# and RegDate<=#01/01/2001# 

你先TmStamp查詢實際運行這個

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001 00:00:00# and TmStamp <=#01/01/2001 00:00:00# 

由於TmStamp字段有時會顯示不出任何結果。

你需要比其它00:00:00時間日期/時間字段做的是運行此查詢

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001# and TmStamp <#02/01/2001# 
+0

問題是日期格式,而不是時間戳。對於我們這些不在美國時間格式區域的人來說,這是一個標準問題。 – Fionnuala 2010-09-21 10:14:34

+0

實際上與格式無關,因爲我已經解決了格式化問題。所以..我做的是..我從TmStamp中獲取日期並將其更改爲整數。然後我檢查..這不是一個GD的方式,但是..它的工作原理..至少現在..所以我認爲時間部分是正確的.. – william 2010-09-22 06:08:51

+0

你不需要在提取的Int( )值。這會導致性能問題,因爲它不能使用索引。 – 2010-09-22 18:32:16

0

我不知道MS Access中日期的內部格式,但無論是浮點數(如Excel)還是整數(如Unix日期),討論都是一樣的。 假設他們被表示爲整數,幾秒鐘...

RegDate是一些數字,xxx。

TmpStamp將是xxx + 13 * 3600。

#01/01/2001#是相同的數字xxx。 #02/01/2001#是xxx + 24 * 3600。

比較TmpStamp與日期不會將其值截斷爲日期(即xxx)。

+0

都是日期/時間格式 – william 2010-09-21 03:03:22

+0

和..解決問題的正確方法? – william 2010-09-21 03:04:24

+0

嘗試使用[Int()](http://support.microsoft.com/kb/210276)? – pascal 2010-09-21 03:41:22

0

查詢在Access必須使用美國日期或一個明確的格式,如ANSI/ISO。 yyyy/mm/dd格式是首選。話雖如此,如果你在查詢設計窗口中構建你的查詢,你會有更多的自由度,因爲Access會爲你更改日期格式。時間部分在這裏或者在這裏並不存在。日期都存儲爲數字,所以即使你的日期顯示爲DD/MM/YYYY,你的SQL應改爲:

SELECT * FROM TABLE WHERE TmStamp >=#2001/01/01# and TmStamp <=#2001/01/02#