我正在尝试编写MS Access SQL查询,以计算自两年时间内以来过去的天数:"夏季"(从1/6到30/09(和非夏季(从1/1到30/05,从1/10到31/12(。
这个日期是产品的最后一个"度量",它可能与两年一样古老。然后,我想知道,如今,夏季的几天,反之亦然,自从测量产品以来已经过去了几天。
。即。日期是31/10/2017,我希望两列列出夏季过去(= 30天*2018年4个月以上的28天= 2019年= 148天(和非夏季的日子(11月至17年5月至17年的7个月,OTT18。到5月19日= 450天(
我一直在尝试使用这样的IIF周期:(Anni是一个变量,意味着我们在哪个年度是0 =今年,过去一年等(
(非夏季的天数
IIF(ANNI=0; "150"; IIF(ANNI=1;
IIF(G2.DATA_PRODUZ<#01/06/2018#;DateDiff("d",[G2]!
[DATA_PRODUZ],#01/06/2018#)+90+150;
IIF(G2.DATA_PRODUZ>#30/08/18#;DateDiff("d",[G2]!
[DATA_PRODUZ],#31/12/2018#)+150));"etc");)
但它行不通,它只能在今年夏天起作用。我会接受任何想法。
也许不是最有效的方法,但肯定最可读的方法可能是定义VBA函数(在公共模块中(,例如:
Function SummerDays(ByVal dateFrom As Date, ByVal dateTo As Date) As Long
While dateFrom < dateTo
If dateFrom >= DateSerial(Year(dateFrom), 6, 1) And dateFrom <= DateSerial(Year(dateFrom), 9, 30) Then
SummerDays = SummerDays + 1
End If
dateFrom = dateFrom + 1
Wend
End Function
然后从您的查询中调用此内容:
SummerDays(G2.DATA_PRODUZ, Date())
然后,在非夏季,您可以通过倒数if
语句定义另一个函数,也可以从两个日期之间的总天数中减去夏季数量,例如:
DateDiff("d",G2.DATA_PRODUZ, Date()) - SummerDays(G2.DATA_PRODUZ, Date())
创建一个公共模块来定义上述功能:
- 使用 alt f11 打开VBA IDE
- 通过转到
Insert > Module
或 alt , i , m - 将上述函数定义复制到
Option
语句下方的模块中。 - 用适当的名称保存模块。