我在大学工作,我们的学生管理系统学年开始日期由8月1日或之前的星期一决定。我需要在我的查询中匹配这一点,有没有办法在此日期之前或之前轻松获取星期一的日期。T-sql日期星期一
回答
set datefirst 1; -- Make Monday the first day of the week
select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')
返回2009年7月27日,这是周一或之前8月1日将其更改为2005年时,8月1日是个周一,查询将返回08-01
你可以使用datepart来获得周日,然后做一点数学来回到你的星期一。此示例使用美国默认的datefirst 7(其中星期一是本周的第2天)。调整要添加的日期,以星期一的哪一天为您的区域设置。
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
非常哈克
DECLARE @weekday int
SELECT @weekday = DATEPART(WEEKDAY, '1-Aug-2009')
SELECT CASE
WHEN @weekday = 1 THEN '1-Aug-2009' ELSE DATEADD (dd,(@weekday-2)*-1, '1-Aug-2009')
END
这是一个通用的算法,将返回任何月份的第一个星期一(@inputdate):
DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
这是在SQL Server中获取本月第一个星期一的常用方法。这link解释了上述计算如何与许多其他日期计算一起工作。
下面是上面的算法可以用来获得周一或一个月的第一天之前:
-- Set month to get Monday before or at 1st of month.
DECLARE @inputDate DATETIME
SET @inputDate = '2009-08-01'
-- Get first Monday of month.
DECLARE @firstMonday DATETIME
SET @firstMonday = DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0)
-- Determine date for first Monday on or before 1st of month.
DECLARE @startDate DATETIME
SET @startDate = @firstMonday
IF @firstMonday > @inputDate
SET @startDate = DATEADD(wk, -1, @firstMonday)
SELECT @startDate
接受的答案并没有为我工作,因为我需要一个都周日周和周一周在同一个查询中。这可以跨越不同的 “DATEFIRST” 设置:
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
“DATEPART(DW, '19000101')”,将决定你的 “DATEFIRST” 自1900-01-01设置是在星期一。如果您想要以星期二为基础的星期,则可以将19000101更改为19000102.
顺便说一下,'20110515'是唯一适用于所有SQL Server文化设置的日期格式。像“2011-05-06”这样的日期在某些国家会被误解。 (赞成Itzik本甘指出这一点)
+1,用于优雅的'datefirst'不可知解决方案。 – 2012-01-24 19:42:22
不错,应该是被接受的答案 – nhaberl 2016-04-12 09:27:16
- 1. PHP星期一星期一和星期六日期问题
- 2. 如何在周开始日期(星期一)从WeekNumber和Year TSQL
- 3. Django的日期字段得到一个星期就像星期日星期一
- 4. 获取从给定日期星期一到星期五的星期日期
- 5. 本周星期一日期
- 6. 获取基于给定日期的星期一至星期日
- 7. 作为星期一或星期日influxdb使星期开始
- 8. jquery日期 - 确定一个星期日?
- 9. TSQL相对星期编号
- 10. dropdownlist日期/星期
- 11. UNIX日期:如何将星期数转换为日期范围(星期一至星期日)?
- 12. TSQL日期转换
- 13. TSQL日期条件
- 14. 在SQL中使用今天的日期获取星期日期(星期一)
- 15. SQL Server 2012-星期日期星期六到星期五
- 16. 从日期字段获取星期一星期Hive
- 17. 查找当前星期的开始日期(星期一)
- 18. 计算日期星期一作为星期几= 1
- 19. 如果周六或周日落在星期一或星期日
- 20. Informatica - 获取星期一的日期号
- 21. osx星期一日期本周bash
- 22. 向日期添加一个星期()
- 23. 获取日期2星期一前
- 24. 上个星期一的日期Excel
- 25. 日期星期几在Groovy
- 26. php日期/星期问题
- 27. 如何查看星期六/星期日?
- 28. 忽略星期六和星期日
- 29. 开始星期日的第一周的星期几,星期六的星期的最后一天结束
- 30. UIDatepicker日期只显示星期一的日期
我标记下来,因为以下返回一个不正确的结果:select dateadd(dd,-datepart(dw,'2011-05-15')+ 2,'2011 -05-15' )。这返回'2011-05-16'。 – 2011-05-19 21:27:40