如何使用T-SQL获取下周周一至周五的日期?
获取下周周一至周五的T-SQL实现方案
没问题,我来帮你搞定这个需求!你的现有代码逻辑有点绕,而且没准确锁定下周的日期范围,咱们换个更直接的方式来实现。
核心思路是先算出下周周一和下周周五的具体日期,然后直接从Calendar表中筛选这个区间内的记录就行——不管当前@Date是本周的哪一天,都能精准返回下周的工作日。
给你写好完整的代码:
DECLARE @Date datetime = '5/23/18'; -- 计算下周周一的日期:先找到当前日期所在周的周数,加1后得到下一周的起始(周一) DECLARE @NextWeekMonday datetime = DATEADD(week, DATEDIFF(week, 0, @Date) + 1, 0); -- 下周周五就是周一加4天 DECLARE @NextWeekFriday datetime = DATEADD(day, 4, @NextWeekMonday); -- 筛选Calendar表中日期在下周周一到周五之间的记录 SELECT * FROM Calendar WHERE date BETWEEN @NextWeekMonday AND @NextWeekFriday;
代码解释:
DATEDIFF(week, 0, @Date):计算从1900年1月1日(默认是周一)到@Date的总周数,这样能确定当前日期属于第几周。DATEADD(week, ..., 0):把周数加1后,再转换回具体日期,就得到了下周的周一。- 加4天直接得到周五,因为周一到周五刚好间隔4天(周一+0是周一,+4就是周五)。
如果你的Calendar表中date字段是date类型(不带时间),可以把变量类型改成date,这样更严谨:
DECLARE @Date date = '5/23/18'; DECLARE @NextWeekMonday date = DATEADD(week, DATEDIFF(week, 0, @Date) + 1, 0); DECLARE @NextWeekFriday date = DATEADD(day, 4, @NextWeekMonday); SELECT * FROM Calendar WHERE date BETWEEN @NextWeekMonday AND @NextWeekFriday;
测试一下你给的示例:当@Date是5/21/18(周一)、5/22/18(周二)、5/23/18(周三)、5/24/18(周四)时,这段代码都会返回5/28/18(周一)到6/1/18(周五)的日期,完全符合你的需求。
内容的提问来源于stack exchange,提问作者cmpmd2




