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