Sql server 查找当前周的开始日(星期一)
正在查找一个或多个SQL查询,这些查询将确定当前周的开始日期(星期一) 例如: 如果今天是->那么一周的开始是Sql server 查找当前周的开始日(星期一),sql-server,tsql,Sql Server,Tsql,正在查找一个或多个SQL查询,这些查询将确定当前周的开始日期(星期一) 例如: 如果今天是->那么一周的开始是 Sat Oct 09, 2010 -> Start of the week is Monday Oct 04, 2010 Sun Oct 10, 2010 -> Start of the week is Monday Oct 04, 2010 Mon Oct 11, 2010 -> Start of the week is Monday Oct 11, 2010 Tu
Sat Oct 09, 2010 -> Start of the week is Monday Oct 04, 2010
Sun Oct 10, 2010 -> Start of the week is Monday Oct 04, 2010
Mon Oct 11, 2010 -> Start of the week is Monday Oct 11, 2010
Tue Oct 12, 2010 -> Start of the week is Monday Oct 11, 2010
我在谷歌和StackOverflow上看到了很多“解决方案”。这张照片看起来像:
SET @pInputDate = CONVERT(VARCHAR(10), @pInputDate, 111)
SELECT DATEADD(DD, 1 - DATEPART(DW, @pInputDate), @pInputDate)
这失败是因为:
2010年10月10日星期日->2010年10月11日星期一的开始(这是不正确的)。尝试使用将一周中的某一天明确设置为“第一天”
set DATEFIRST 1 --Monday
select DATEADD(DD, 1 - DATEPART(DW, @pInputDate), @pInputDate)
这将返回InputDate所在周的星期一。建立在p.campbell的解决方案之上,如果您不想使用或无法使用“SET DATEFIRST 1”,您可以通过执行以下操作来解决此问题:
SELECT DATEADD(DD, 2 - DATEPART(DW, DATEADD(DD, -1, @pInputDate)), DATEADD(DD, -1, @pInputDate))
您不需要使用DATEFIRST:
SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) -- Monday of current week
SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()) - 1, 0) -- Monday of last week
SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()) + 1, 0) -- Monday of next week
SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) + 4 -- Friday of current week
您需要先使用DATEFIRST。没有它,您的代码总是将星期天指定为“错误”的一周:
选择DATEADD(wk,DATEDIFF(wk,0,'2020-10-11'),0)-->Sunday->2020-10-12
选择DATEADD(wk,DATEDIFF(wk,0,'2020-10-12'),0)-->Monday->2020-10-12
选择DATEADD(wk,DATEDIFF(wk,0,'2020-10-18'),0)-->Sunday->2020-10-19
在这种情况下,需要考虑2个因素:
@@DATEFIRST
值@@DATEFIRST
值:
选择DATEADD(日期,(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-12'))%7)%7),'2020-10-12')
选择DATEADD(日期),(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-13'))%7),'2020-10-13')
选择DATEADD(日期),(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-14'))%7),'2020-10-14')
选择DATEADD(日期),(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-15'))%7),'2020-10-15')
选择DATEADD(日期),(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-16'))%7),'2020-10-16')
选择DATEADD(日期),(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-17'))%7),'2020-10-17')
选择DATEADD(日期),(@@DATEFIRST+7-(2-DATEPART(工作日,'2020-10-18'))%7),'2020-10-18')
最简单的实现
选择DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)当前周的星期一
是否只需要查找星期一或一周的第一个工作日?我想要一周的开始(星期一),无论是工作日还是假日。我找到了另一个解决方案,但这个解决方案更简单、更简洁。谢谢。我们怎样才能找到上周一到上周一?我试着在表达式中用2代替1,但没有成功。有什么建议吗?谢谢,这一条SQL语句在SAP Universe对象定义中为我带来了好处。通过识别周开始日期,我可以对周运行图绘图进行聚合。