在产品寿命中计算几天不包括夏季



我正在尝试编写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语句下方的模块中。
  • 用适当的名称保存模块。

相关内容

  • 没有找到相关文章

最新更新