0

我想问一下如何在工作日约会

在此处输入图像描述

green is weekday

red is sunday

所以当我在 2012 年输入 sql 命令(如 27)时,它将显示日期 2012-07-2 直到 2012-07-08

4

1 回答 1

2

此查询使用单个参数@weekno作为输入并返回该周的 7 天,将星期一作为一周的第一天。WeekNo 的定义遵循 SQL Server 的定义,DatePart(Week)因为这取决于 @@Datefirst。这没有。

dateadd..行是返回一年中的第一个星期一的表达式。我从这里得到的。它上面的行只是添加了周数和 0-6 来创建 7 天。要验证这对于任何年份都是正确的,CURRENT_TIMESTAMP请将查询更改为日期,例如20180708. 仅供参考,2018 年 1 月 1 日是星期一。

declare @weekno int = 27;
select
    (@weekno-1)*7+v.num+
    dateadd(dd,(datediff(dd,0,dateadd(yy,datediff(yy,0,CURRENT_TIMESTAMP),6))/7)*7,0)
from (values(0),(1),(2),(3),(4),(5),(6))v(num)
order by num

-- results
July, 02 2012 00:00:00+0000
July, 03 2012 00:00:00+0000
July, 04 2012 00:00:00+0000
July, 05 2012 00:00:00+0000
July, 06 2012 00:00:00+0000
July, 07 2012 00:00:00+0000
July, 08 2012 00:00:00+0000
于 2012-10-05T05:15:55.967 回答