这里是我得到的第一部分。可能有更好的方法来实现这一点。我所做的是获得当前月份并从中扣除一份。然后我把日期和当年连接到月份。然后我检查了当天的名字,看看是否是星期六。如果是的话,那我就用那个日期。否则,我会在第二天用相同的支票,等等。如果你想使用它,如果你在一月份,你将需要添加额外的逻辑。你也可以用你正在使用的参数替代NOW()。
=IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/1/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/1/" & YEAR(NOW()))),
(IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/2/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/2/" & YEAR(NOW()))),
(IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/3/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/3/" & YEAR(NOW()))),
(IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/4/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/4/" & YEAR(NOW()))),
(IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/5/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/5/" & YEAR(NOW()))),
(IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/6/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/6/" & YEAR(NOW()))),
(IIF(WeekdayName(DatePart("w", (CDate((Month(NOW()) - 1) & "/7/" & YEAR(NOW()))))) = "Saturday", (CDate((Month(NOW()) - 1) & "/7/" & YEAR(NOW()))),
"1/1/2010")))))))))))))
在另一方面,会有一个很简单的方法,如果你有在SQL Server中的日历表得到这个(尤其是当你需要在星期五)。你可以做一个简单的选择语句如下:
SELECT
MIN(date)
FROM
calendar c
WHERE
MONTH(DATEADD("m", -1, GETDATE())) = MONTH(date)
AND YEAR(DATEADD("m", -1, GETDATE())) = YEAR(date)
AND datename(dw, date) = 'Saturday'
我不知道Visual Studio报表设计器,但它听起来像End参数也可以定义为:“本月的星期六**加上**六天”。这也是:“在下个月的第六天或之前的最后一个星期五”。不知道这是否有帮助? –