2017-09-14 104 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开始,但我没有想到这一点。 –