代码之家  ›  专栏  ›  技术社区  ›  user3496218

访问日期计算

  •  0
  • user3496218  · 技术社区  · 7 年前

    我对访问SQL非常陌生,并试图弄清楚这个日期计算意味着什么:

    >Date() And <DateAdd("d",
                         -1,
                         DateAdd("m",
                                  8,
                                  DateAdd("d",
                                           -(Day(Date())-1),
                                           Date())
                                )
                         )
    

    任何口译帮助都会很好。

    谢谢

    2 回复  |  直到 7 年前
        1
  •  4
  •   Dai    7 年前

    让我们看看最后一个表达式:

    DateAdd("d",-1,DateAdd("m",8,DateAdd("d",-(Day(Date())-1),Date())))
    

    如果将函数参数分隔到各自的行中,则更容易阅读:

    DateAdd(
        "d",
        -1,
        DateAdd(
            "m",
            8,
            DateAdd(
                "d",
                - ( Day( Date() ) - 1 ),
                Date()
            )
        )
    )
    
    • DateAdd( "d", a, b ) 添加 a -许多天到 b .
    • DateAdd( "m", a, b ) 添加 -几个月后 b .
    • ( Day( Date() ) - 1 ) 是今天的月份,减去1( Date() 2017-02-07 ,因此结果是 6 .
    • DateAdd( "d", -6, Date() ) 将从今天的日期减去6天,因此结果为 2017-02-01 .
    • DateAdd( "m", 8, (2017-02-01) ) 将增加8个月 2017-02-01 ,因此结果是 2017-10-01 .
    • DateAdd( "d", -1, (2017-10-01) ) 将从中减去1天 2017-10-01 ,因此结果是 2017-09-30 .

    因此,您最初发布的表达式变成: > Date() AND < (2017-09-30) . 这是无效的SQL,因为比较运算符 < , > = 每个需要两个操作数。有可能作者认为他们像 BETWEEN 接线员,但他们错了。

    出于好奇,我把这些 DateAdd 将操作转化为函数,并根据2017年的日期范围绘制函数图:

    enter image description here

    看起来这是一个函数 获取当月最后一天的日期,即从现在算起的8个月 ,所以有 日期() 2017年1月( 01-31 )结果在 2017-08-31 .

        2
  •  0
  •   Gustav    7 年前

    使用起来可能更简单 日期序列号 ,至少更容易和更快地理解:

    >DateSerial(Year(Date()), Month(Date()) + 8, 0)
    

    还有,我想它真的应该读 >= ,因此您的标准可以是:

    >Date() And <=DateSerial(Year(Date()),Month(Date())+8,0)