【问题标题】:How to decipher complex DATEADD function from MS Access如何从 MS Access 中破译复杂的 DATEADD 函数
【发布时间】:2019-09-13 19:02:27
【问题描述】:

我从一个旧的 MS Access 数据库继承了一个查询,并且我一生都无法弄清楚在这个日期参数函数中试图做什么。我通常只使用 SQL,这似乎有点不同。任何人都可以帮助描述这个逻辑在做什么吗?

use pdx_sap_user 
go

select po_number, 
       po_issue_date 

from   vw_po_header 

where po_issue_date > getDate() And PO_issue_date < DateAdd("d",-1,DateAdd("m",8,DateAdd("d",-(Day(getDate())-1),getDate())))

【问题讨论】:

  • 您的代码是 SQL Server 代码,而不是 MS Access 代码。

标签: sql ms-access dateadd


【解决方案1】:

您可以使用 DateSerial 对它进行大量去混淆:

where 
    po_issue_date > getDate() And 
    po_issue_date < DateSerial(Year(getDate()), Month(getDate()) + 8, 0)

【讨论】:

    【解决方案2】:

    第一:Access中没有getDate()函数。可能应该是返回当前日期的Date()。
    现在从内部表达式开始:
    Day(Date()) 以整数形式返回当前日期1-31。
    因此,在 DateAdd("d", -(Day(Date())-1), Date()) 中,从当前日期减去所需的天数以返回当前月份的第一天。

    那么:

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

    将 8 个月添加到当前月份的 1 号,返回 8 个月后的日期当月的 1 号。
    最后:

    DateAdd("d", -1,...)
    

    从上一个表达式返回的日期中减去 1 天,返回该日期的上个月的最后一天。
    所以如果你今天运行13-Sep-2019这段代码,结果会是:

    30-Apr-2020
    

    因为这是8个月后上个月的最后一天。

    【讨论】:

      【解决方案3】:

      我认为如下:

      1. 获取当前日期
      2. 减去当月的当天-1得到当月的第一天
      3. 为此添加 8 个月
      4. 减去 1 天得到上个月的最后一天

      所以它计算出大约 8 个月的最后期限。

      但我想知道未来采购订单的签发日期会如何......

      【讨论】:

        猜你喜欢
        • 2021-10-13
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        相关资源
        最近更新 更多