给定日期,可以说2019年8月2日,这是该月的第一个星期五。下个月(9月6日)的第一个星期五是什么。现在说我9月26日是本月的最后一个星期四。下个月的最后一天是几月几号。我必须在MSSQL中执行此操作。
答案 0 :(得分:0)
9月12日,您会怎么做?听起来您有两种不同的情况。
无论哪种情况,如果有的话,我都会使用日期表或日历表。如果没有,请设置一个。我强烈推荐它。 Ed Pollock撰写了一篇很棒的文章,介绍了日期表的设置:Designing a Calendar Table。 SQLServer.Info在此处有一个很好的表示例:Table Example。良好测评的第二个示例Table Setup
Table Setup。这就是它的外观。或至少类似的东西。您可以添加更多列以进行更多比较。
设置好日历表后,只需将所需日期与该表进行比较即可。
这是您根据日期表来获取下个月的第一周的方法
DECLARE @Date DATE = '8/2/2019';
SELECT [dt].Date
FROM [Datetbl] AS [dt]
WHERE [dt].[Weekday] = DATEPART([weekday], DATEADD(day, -1, @Date)) -- is same day of the week
AND [dt].Month = DATEPART(month, DATEADD(MONTH, 1, @Date)) -- Grab the month number for "Next Month"
AND [dt].Year = DATEPART(year, DATEADD(MONTH, 1, @Date)) -- Grab year of next month since that will be different for December
AND [dt].[WeekOfMonth] IN
(SELECT MIN([WeekOfMonth])
FROM [Datetbl] AS [dt1]
WHERE [dt1].[Weekday] = DATEPART([weekday], DATEADD(day, -1, @Date))
AND [dt1].Month = DATEPART(month, DATEADD(MONTH, 1, @Date))
AND [dt1].Year = DATEPART(year, DATEADD(MONTH, 1, @Date))
); -- returns Sept 6
这是您根据日期表获取月中最后一个工作日的方式
DECLARE @Date DATE = '9/26/2019';
SELECT [dt].Date
FROM [Datetbl] AS [dt]
WHERE [dt].[Weekday] = DATEPART([weekday], DATEADD(day, -1, @Date)) -- is same day of the week
AND [dt].Month = DATEPART(month, DATEADD(MONTH, 1, @Date)) -- Grab the month number for "Next Month"
AND [dt].Year = DATEPART(year, DATEADD(MONTH, 1, @Date)) -- Grab year of next month since that will be different for December
AND [dt].[WeekOfMonth] IN
(SELECT MAX([WeekOfMonth])
FROM [Datetbl] AS [dt1]
WHERE [dt1].[Weekday] = DATEPART([weekday], DATEADD(day, -1, @Date))
AND [dt1].Month = DATEPART(month, DATEADD(MONTH, 1, @Date))
AND [dt1].Year = DATEPART(year, DATEADD(MONTH, 1, @Date))
); -- returns Oct 31st
希望这会有所帮助。