2017-09-14 38 views
1

我想比較訪問數據庫中的4個日期字段,並將最新值和adatum之間的日期差異設置爲parkdauer。它適用於日期在同一月份的任何行。如果月份不同,比較日期不起作用

strSQL = "UPDATE Steuerungsboard 
      SET parkdauer = DateDiff('d', [kspausgang], [adatum]) 
      WHERE FORMAT(kspausgang, 'dd/MM/yyyy') >= FORMAT(iausgang, 'dd/MM/yyyy') 
      And FORMAT(kspausgang, 'dd/MM/yyyy') >= FORMAT(aausgang, 'dd/MM/yyyy') 
      And FORMAT(kspausgang, 'dd/MM/yyyy') >= FORMAT(gausgang, 'dd/MM/yyyy');" 
CurrentDb.Execute strSQL, FailonError 

感謝您的幫助!

+1

存儲計算值是針對標準化。爲什麼要這樣做,而不是使用計算值創建查詢? –

回答

5

只要刪除所有那些FORMAT的東西,這將運行良好。

FORMAT的問題在於您實際上是按字母順序比較日期,並且由於多種原因,這是錯誤的。

"UPDATE Steuerungsboard 
      SET parkdauer = DateDiff('d', [kspausgang], [adatum]) 
      WHERE kspausgang >= Nz(iausgang) 
      And kspausgang >= Nz(aausgang) 
      And kspausgang >= Nz(gausgang);" 
+0

沒有格式,它不會更新任何字段。這實際上是我如何開始的。 –

+1

這是實現它的有效方法,假設這些都是有效的日期字段。如果您將格式更改爲「YYYY/MM/DD」,則可以按字母順序進行比較,但如果我的方法無效,則可能存在潛在的問題,並且最好將其跟蹤下來。 –

+0

感謝您的幫助。對於潛在的問題,你有什麼想法嗎?它們都是日期字段,儘管它們可以是NULL。當然,如果按照字母進行比較,他們必須從Year開始,但我沒有想到這一點。 –