我很擅长访问SQL并试图找出这个日期计算的含义:
>Date() And <DateAdd("d",
-1,
DateAdd("m",
8,
DateAdd("d",
-(Day(Date())-1),
Date())
)
)
任何帮助解释都会很棒。
感谢。
答案 0 :(得分:4)
让我们看看最后一个表达式:
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 )
添加a
- 许多个月到b
。( Day( Date() ) - 1 )
是今天的日期,减1(Date()
是2017-02-07
,结果是6
。DateAdd( "d", -6, Date() )
将从今天起减去6天,结果为2017-02-01
。DateAdd( "m", 8, (2017-02-01) )
会在2017-02-01
后添加8个月,因此结果为2017-10-01
。DateAdd( "d", -1, (2017-10-01) )
将从2017-10-01
减去1天,结果为2017-09-30
。因此,您最初发布的表达式变为:> Date() AND < (2017-09-30)
。这不是有效的SQL,因为比较运算符<
,>
和=
各需要两个操作数。作者可能认为它们像BETWEEN
运算符一样被使用,但它们是错误的。
出于好奇,我将这些DateAdd
操作变成了一个函数,并在2017年生成了函数与日期范围的关系图:
看起来它的功能是获取当前最后一天的日期,距现在8个月,所以2017年1月的任何Date()
({{1 } {}导致01-31
。
答案 1 :(得分:0)
使用 DateSerial 可能更简单,至少更容易理解:
>DateSerial(Year(Date()), Month(Date()) + 8, 0)
另外,我想它确实应该读>=
,因此您的标准可以是:
>Date() And <=DateSerial(Year(Date()),Month(Date())+8,0)