这些似乎有点冗长,也许过于复杂;我可以简化和/或使它们更具可读性吗?
他们将返回前一周的周一和周日的日期(作为整数类型)。
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);
答案 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';