2017-05-01 194 views
0

的結果,當我運行此查詢:請解釋這個查詢

SELECT InwardDate 
FROM tblDoc 
WHERE InwardDate > DATE() AND (InwardDate IS NOT NULL) 

我得到這樣的結果

5/1/2017 

我在數據庫中的行具有值:

5/1/2017 

因此,5/1/2017不是> 5/1/2017,結果應該是沒有記錄返回。

我後來去和嘗試這樣做,萬一有一個時間差,我不能看到:

SELECT DATEDIFF("s", InwardDate, DATE()) AS DiffBetween, InwardDate 
FROM tblDoc 
WHERE InwardDate > DATE() AND (InwardDate IS NOT NULL) 

我得到:

enter image description here

需要注意的是,當我做:

SELECT DATE() FROM tblDoc 

我得到:

5/1/2017 

我看到第一個查詢返回一個明顯不合邏輯的結果,因爲存儲在數據庫中的日期與SQL中的日期具有相同的確切值,但第一個查詢說db列的值大於返回的日期由DATE()功能。我錯過了什麼?

回答

2

我現在在哪裏,它是5/1/2017。

如果是的話,該日的價值,當然,要排除:

WHERE INWARDDATE > Date() 

的DATEDIFF,應該報告的值,如果2個日期是不一樣 。

嗯,是的,但你沒有記錄返回,因此沒有datediff。

您看到的值是InwardDate在新記錄(*)上的默認值

+0

感謝您的幫助,但是,WHERE InwardDate> DATE()AND(InwardDate IS NOT NULL)會生成5/1/2017的單個結果行。 – NoChance

+2

左邊也應該有'*'。嘗試刪除「InwardDate」列的默認值以使事情更清晰。 – Andre

+0

@Andre,你關於「*」前綴的觀點以及它不代表真實行的事實非常好。事實上,如果我用「WHERE FALSE」替換整個WHERE表達式,我仍然會得到相同的結果。對於列的默認值,您額外的注意點也非常重要。非常感謝你。 – NoChance

0

date()會返回當前日期(4/30/17)。因此,如果它大於今天的日期並且不爲空,它將返回進入日期。 5/1/17是> 4/30/17並且不爲空,因此它返回它。

+0

謝謝你的幫助,我目前在這裏,它是2017年5月1日。我對這個問題做了一個編輯,提到這個......時區確實很棘手。另外,如果兩個日期不一樣,那麼應該報告一個值。 – NoChance

+0

SQL服務器是否位於你的時區?也可以嘗試輸出date()的結果來查看它是什麼。 –

+0

好的一點,我試圖MS-Access與MS-Access後端,而不是與SQL服務器後端。數據庫在我的機器上。 – NoChance