0

这些看起来有点冗长,而且可能过于复杂。我可以简化和/或使它们更具可读性吗?

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

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

2 回答 2

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 认为一周从哪里开始,因此根据该设置,此代码可能不会给出星期一->星期日。

于 2013-02-25T17:38:30.313 回答
2

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

-- 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';
于 2013-02-25T17:40:35.507 回答