使用GETDATE()的上一个星期一/星期日日期的标准语法

时间:2013-02-25 17:33:07

标签: sql sql-server-2012

这些似乎有点冗长,也许过于复杂;我可以简化和/或使它们更具可读性吗?

他们将返回前一周的周一和周日的日期(作为整数类型)。

declare @sDate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 0),112),
    @edate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1),112);

2 个答案:

答案 0 :(得分:3)

根据我的经验,如果您因为演示之外的任何原因将日期转换为字符,那么您就犯了一个错误。另外 - 如果你两次打电话给GetDate,你应该得到不同的答案。

DECLARE
  @Now datetime,
  @WeekStart datetime,
  @LastWeekStart datetime,
  @LastWeekEnd datetime

SET @Now = GetDate()
SET @WeekStart = DateAdd(wk, DateDiff(wk, 0, @Now), 0) --standard time trimmer
SET @LastWeekStart = DateAdd(wk, -1, @WeekStart)
SET @LastWeekEnd = DateAdd(dd, -1, @WeekStart)

SELECT @Now, @WeekStart, @LastWeekStart, @LastWeekEnd

另请注意,有一个sql设置可以控制sql server认为本周开始的位置,因此根据该设置,此代码可能不会给予Monday-> Sunday。

答案 1 :(得分:2)

最简单的方式是使用calendar table。日历表可以简化您对这些行的查询。

-- Select the previous Sunday. The right inequality operator depends
-- on exactly what *you* mean by "previous".
select max(calendar_date)
from calendar
where calendar_date < current_date
  and calendar_day_of_week = 'Sun';