获取SQL Server中的第一天

获取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);

但事实上,我必须做出这样的例外让我有点不安。此外,如果这是一个重复的问题,请道歉。我发现了一些相关问题,但没有一个专门解决这个问题。


守候你守候我
浏览 591回答 3
3回答

慕容森

这对我很有用:创造功能[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)结束
打开App,查看更多内容
随时随地看视频慕课网APP