【发布时间】:2015-04-17 16:18:06
【问题描述】:
我有一个特定的 DATETIME 值,我想获取给定日期之前的给定工作日“n”(其中 n 是从 1 到 7 的整数)的 DATETIME 值。
问题:如果给定 currentDate 的值和 lastWeekDay 的值,我该怎么做?
例如,如果给定的日期是 2015 年 6 月 15 日,格式为 mm/dd/yyyy,那么 2015 年 6 月 15 日之前的 6 周工作日的日期是什么。在这个例子中,给定的日期是星期一,我们想要上星期五的日期(即工作日 =6)。
declare @currentDate datetime, @lastWeekDay int;
set @currentDate = getdate();
set @lastWeekDay = 6;--this could be any value from 1 thru to 7
select @currentDate as CurrentDate, '' as LastWeekDayDate --i need to get this date
更新 1
除了 Anon 的出色回答外,我还找到了另一种方法,如下所示。
DECLARE @currentWeekDay INT;
SET @currentWeekDay = DATEPART(WEEKDAY, @currentDate);
--Case 1: when current date week day > lastWeekDay then subtract
-- the difference between the two weekdays
--Case 2: when current date week day <= lastWeekDay then go back 7 days from
-- current date, and then add (lastWeekDay - currentWeekDay)
SELECT
@currentDate AS CurrentDate,
CASE
WHEN @currentWeekDay > @lastWeekDay THEN DATEADD(DAY, -1 * ABS(CAST(@lastWeekDay AS INT) - CAST(@currentWeekDay AS INT)), @currentDate)
ELSE DATEADD(DAY, @lastWeekDay - DATEPART(WEEKDAY, DATEADD(DAY, -7, @currentDate)), DATEADD(DAY, -7, @currentDate))
END AS LastWeekDayDate;
【问题讨论】:
-
是特定年份还是任何年份?
-
没有。给定的数据是当前数据和工作日。
-
那么,如果给定的日期是 04/17/2015 并且 lastWeekDay =4,那么结果是 2015 年 4 月 15 日。这样正确吗?
-
是的,没错。但我正在寻找一个通用的解决方案,而不仅仅是你提到的这个案例。
-
我不明白你在这里想要做什么。您是否试图找出包含您传入日期的给定工作日数字的日期?换句话说,给定一个你想知道的日期时间,得到星期几?