【问题标题】:Greater than / Less than date/time table expression大于/小于日期/时间表表达式
【发布时间】:2016-12-10 17:58:18
【问题描述】:

我在 MS-access 表中有以下表达式:

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)

谢谢

【问题讨论】:

    标签: ms-access ms-access-2010


    【解决方案1】:

    您的问题是您将日期威胁为字符串。始终使用 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)
    

    【讨论】:

      【解决方案2】:

      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"))
      

      最后,如果你想要昨天滚动,而不是永远 2016 年 12 月 7 日(因为如果是这种情况,你只会使用那个日期),你需要使用这个函数获取今天的日期:

      Date()
      

      因此,将其放入我们的组合中,我们得到:

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

      【讨论】:

      • 谢谢,它不会让我在表达式生成器中使用 DATEADD 函数,但我应该能够在 VBA 中做到这一点
      • 你搞错了。 Format 顾名思义,格式化日期值。因此它总是返回一个字符串,而不是日期值。因此,在Format("12/8/2016 6:00:00AM", "mm/dd/yyyy hh:nn:ss am/pm") 中,"12/8/2016 6:00:00AM" 首先使用您在 Windows 中的设置转换为日期值,然后Format 返回一个格式化字符串,在DateAdd 可以处理之前再次转换为日期值。相当复杂。
      • @Gustov 你是对的。我的答案感觉太复杂了,但它奏效了,所以我就顺其自然了。感谢您的解释。为您的回答 +1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2019-02-26
      • 2015-10-14
      相关资源
      最近更新 更多