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



这些看起来有点冗长,可能过于复杂;我能简化和/或使它们更易读吗?

它们返回前一周的星期一和星期天的日期(作为整数类型)。

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

根据我的经验,如果您出于任何原因将日期转换为字符,而不是出于表示,那么您就犯了一个错误。另外,如果你两次调用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。

最简单的方法是使用日历表。日历表可能会将您的查询简化为类似这样的内容。

-- 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';

最新更新