当用户输入其他日期时,我使用这个sql来获取一周的开始日期(星期一)
@StartDate有格式(yyyymmdd)
SQL: CAST(convert(varchar(12),DATEADD(week,DATEDIFF(week,0,@StartDate),0),112) as int
问题是,当输入的日期是从星期二到星期六时,它返回到当前星期的正确星期一。然而,当输入的日期是星期日时,它返回下周星期一的日期。
谁能告诉我我做错了什么thank you
您的星期日与星期一属于同一周,这将使星期一成为一周的第一天。它应该修复你的查询
set datefirst 1
这个语法不关心数据库考虑一周的第一天是哪一天,它将计算@StartDate实际一周的星期一。
DATEADD(week, DATEDIFF(day, 0, @StartDate)/7, 0)
你可以这样测试:
SELECT DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
这行得通:
SELECT DATEPART(weekday, DATEADD(day, -1, CONVERT(DATETIME, @StartDate)))
另外,不要忘记先设置正确的日期格式:
SET DATEFORMAT ymd
你知道我是怎么做的吗?
SELECT max(cal_date)
FROM calendar
WHERE cal_date <= CURRENT_DATE
AND day_of_week = 'Mon'
没有算术。速度快,在我的旧盒子上运行0.000082秒。日历表被索引;它可以有效地用于大型表的连接。
最重要的是——你可以看出这个查询显然是正确的。