获取SQL Server中的第一天我试图按周分组记录,将汇总日期存储为一周的第一天。但是,我用于舍入日期的标准技术似乎在几周内没有正常工作(尽管它确实存在了几天,几个月,几年,几个季度以及我应用它的任何其他时间范围)。这是SQL:select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0);返回2011-08-22 00:00:00.000,这是星期一,而不是星期日。选择@@datefirst返回7,这是星期日的代码,所以据我所知,服务器设置正确。通过将上面的代码更改为:我可以轻松地绕过这个:select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1);但事实上,我必须做出这样的例外让我有点不安。此外,如果这是一个重复的问题,请道歉。我发现了一些相关问题,但没有一个专门解决这个问题。
3 回答
慕容森
TA贡献1853条经验 获得超18个赞
这对我很有用:
创造功能[dbo]。[StartOfWeek]( @INPUTDATE DATETIME)退货日期如开始 - 这在功能上不起作用。 - SET DATEFIRST 1 - 将星期一设置为星期的第一天。 DECLARE @DOW INT - 存储星期几 SET @INPUTDATE = CONVERT(VARCHAR(10),@ INPUTDATE,111) SET @DOW = DATEPART(DW,@ INPUTDATE) - 星期一的魔术转换为1,星期二为2,等等。 - 不管SQL服务器对本周开始的看法。 - 但是在这里我们将星期日标记为0,但我们稍后会解决这个问题。 SET @DOW =(@ DOW + @@ DATEFIRST - 1)%7 IF @DOW = 0 SET @DOW = 7 - 修复周日 返回DATEADD(DD,1 - @ DOW,@ INPUTDATE)结束
添加回答
举报
0/150
提交
取消