如何从 MS Access 中破译复杂的 DATEADD 函数
How to decipher complex DATEADD function from MS Access
我从一个旧的 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())))
我认为如下:
- 取当前日期
- 当月的当天减去-1 得到当月的第一天
- 为此增加 8 个月
- 减去 1 天得到上个月的最后一天
所以它计算出大约 8 个月的截止日期。
但我想知道 PO 签发日期在未来如何...
首先:Access中没有getDate()
功能。可能应该是 Date()
,return 是当前日期。
现在从内部表达式开始:
Day(Date())
return 以整数表示的当前日期 1-31
。
因此,在 DateAdd("d", -(Day(Date())-1), Date())
中,从当前日期减去需要的天数到 return 当前月份的 1 号。
那么:
DateAdd("m", 8, DateAdd("d", -(Day(Date())-1), Date()))
将 8 个月加到当前月份的 1 号上return将 8 个月后日期的月份的 1 号加到
最后:
DateAdd("d", -1,...)
从上一个表达式 return 的日期减去 1 天,return 该日期上个月的最后一天。
所以如果你今天 运行 13-Sep-2019
这段代码,结果将是:
30-Apr-2020
因为这是8个月后上个月的最后一天。
您可以使用 DateSerial:
对其进行大量去混淆处理
where
po_issue_date > getDate() And
po_issue_date < DateSerial(Year(getDate()), Month(getDate()) + 8, 0)
我从一个旧的 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())))
我认为如下:
- 取当前日期
- 当月的当天减去-1 得到当月的第一天
- 为此增加 8 个月
- 减去 1 天得到上个月的最后一天
所以它计算出大约 8 个月的截止日期。
但我想知道 PO 签发日期在未来如何...
首先:Access中没有getDate()
功能。可能应该是 Date()
,return 是当前日期。
现在从内部表达式开始:
Day(Date())
return 以整数表示的当前日期 1-31
。
因此,在 DateAdd("d", -(Day(Date())-1), Date())
中,从当前日期减去需要的天数到 return 当前月份的 1 号。
那么:
DateAdd("m", 8, DateAdd("d", -(Day(Date())-1), Date()))
将 8 个月加到当前月份的 1 号上return将 8 个月后日期的月份的 1 号加到
最后:
DateAdd("d", -1,...)
从上一个表达式 return 的日期减去 1 天,return 该日期上个月的最后一天。
所以如果你今天 运行 13-Sep-2019
这段代码,结果将是:
30-Apr-2020
因为这是8个月后上个月的最后一天。
您可以使用 DateSerial:
对其进行大量去混淆处理where
po_issue_date > getDate() And
po_issue_date < DateSerial(Year(getDate()), Month(getDate()) + 8, 0)