大于/小于日期/时间表的表达式

时间:2016-12-09 20:30:11

标签: ms-access ms-access-2010

我在MS访问表中有以下表达式:

IIf([End Date/Time]>="12/8/2016 6:00:00",1,0)

12/08/2016 18:15:00会返回' 1' 12/08/2016 14:23:29会返回' 0'

我假设这是AM / PM的问题。我尝试过#6; 00:00 AM'在我的表达中,但没有变化。

此外,我想更换' 12/8/2016'与昨天'但date()-1似乎无法正常工作。

编辑:我发现时间需要是06:00:00'这会产生正确的日期。仍然不知道如何自动获取(即昨天06:00)

由于

2 个答案:

答案 0 :(得分:2)

您的问题是威胁日期为字符串。始终使用 date ,没有例外。

此外,如果您的字段不是日期值,则必须将其转换。

因此,这将起作用:

IIf(DateValue([End Date/Time]) >= #2016/12/8 6:00:00#, 1, 0)

和此:

IIf(DateValue([End Date/Time]) >= Date() - 1, 1, 0)

和此:

IIf(DateValue([End Date/Time]) >= DateAdd("d", -1, #2016/12/8 6:00:00#), 1, 0)

答案 1 :(得分:-1)

2件事。首先,我认为您需要将字符串转换为日期时间。我认为你会得到不稳定的结果,因为它试图将它们作为一种不同的格式进行比较。像字符串或数字。要格式化为日期时间,请使用格式功能:

Format("12/8/2016 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm")

其次,要添加日期,您需要DateAdd功能。

DATEADD('d',-1,"12/8/2016 6:00:00AM")

'd'将-1定义为添加的'日'。

所以,把它们放在一起:

DATEADD("d",-1,Format("12/8/2016 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm"))

最后,如果你想要昨天推出滚动,而不是永久性的12/7/2016(因为如果是这样你就会使用那个日期),你需要通过这个功能得到今天的日期:

Date()

所以,把它扔到我们的混合中我们得到:

DATEADD("d",-1,Format(DATE() & " 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm"))