我需要查找前一时间段的日期 - 例如如果给定月份是1月13日至3月13日,我需要能够计算出前一个时期是10月12日到12月12日。或者如果日期是7月12日到6月13日,我需要提出7月11日到6月12日。所以基本上在x个月的时间段内,我需要返回完成月份的x个月的另一个时间段在指定的时间段之前。
该日期将始终是该月的第一天,因此2012年6月1日或2012年6月1日或2012年6月1日取决于您在世界的哪个位置。
此SQL查询有效,但是当我将其合并到左连接查询中时,似乎会导致问题(请参阅现有问题:Access 2007 - Left Join to a query returns #Error instead of Null)
SELECT DATEADD("m",
1-(1+MONTH(QueryDates.EndDate)-MONTH(QueryDates.StartDate)+
(12*(YEAR(QueryDates.EndDate)-YEAR(QueryDates.StartDate)))),
DATEADD("m",-1,QueryDates.StartDate)) AS StartDatePrevious,
DATEADD("m",-1,QueryDates.StartDate) AS EndDatePrevious
FROM QueryDates;
从我坐的地方看起来有点疯狂,所以有更简单的方法来完成这项任务;或者SQL中是否有任何错误,以后可能会混淆Access?
答案 0 :(得分:1)
这对你有什么用?我相信,这与你在查询中所做的一样,但是使用DateDiff函数会使它看起来不那么粗糙。 DateDiff告诉您(例如)2013年1月1日到2013年3月1日之间有2个月。因此,我们考虑的是3个月的跨度,因此我们从开始日期和结束日期减去3个月以获得上一个跨度:
SELECT DateAdd("m",DateDiff("m",EndDate,StartDate)-1,StartDate) AS StartDatePrevious
,DateAdd("m",DateDiff("m",EndDate,StartDate)-1,EndDate) AS EndDatePrevious
FROM QueryDates;
顺便说一句,除非我弄错了,我相信你打算说“......我需要能够计算出前一段时间是 10月12日到 12月-12 强> ...“
答案 1 :(得分:0)
这里有一个更清洁的SQL。它假设StartDate始终是该月的第一天。
计算期间长度,并返回当前期间开始前一天结束的相同长度。
SELECT QueryDates.StartDate,
QueryDates.EndDate,
Dateadd("m", Datediff("m", [EndDate] + 1, [StartDate]), [StartDate]) AS
StartDatePrevious,
[StartDate] - 1 AS
EndDatePrevious
FROM QueryDates;