Sql 如何找到一周的开始日期

Sql 如何找到一周的开始日期,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有个约会。我必须确定我的日期所在的星期一的日期。这取决于@@DATEFIRST。要获得本周的开始时间(在您的情况下是星期一),请执行以下操作: SET DATEFIRST 1 DECLARE @ThisDate DATE = GETDATE() SELECT DATEADD(DAY, 1 - DATEPART(WEEKDAY, @ThisDate), @ThisDate) MSSQL SELECT CONVERT(varchar,DATEADD(day, DATEDIFF(day, 0,

我有个约会。我必须确定我的日期所在的星期一的日期。

这取决于
@@DATEFIRST
。要获得本周的开始时间(在您的情况下是星期一),请执行以下操作:

SET DATEFIRST 1
DECLARE @ThisDate DATE = GETDATE()
SELECT DATEADD(DAY, 1 - DATEPART(WEEKDAY, @ThisDate), @ThisDate)

MSSQL

 SELECT CONVERT(varchar,DATEADD(day, DATEDIFF(day, 0, GETDATE()) /7*7, 0),100) AS weekstart
MySql

SELECT DATE_ADD(date, INTERVAL(1-DAYOFWEEK(date)) +1 DAY) AS weekStart

取历元(第0天)和日期之间的差值

将该数字除以7并四舍五入(处理整数时自动四舍五入)这将是添加到第0天的周数

SELECT dateadd(week, datediff(d, 0, getdate())/7, 0)

sql server
mysql
?正确地标记你的问题。我想这也会影响你如何分类哪一天属于哪一周-例如,你的一周从哪一天开始?我的一周从周一开始我的一周从周一开始当我们尝试周日时,这会产生问题。我必须在那之前赶星期一。尝试此select dateadd(wk,datediff(wk,0,'2012-01-01'),0)。datefirst未在选择语句中使用select dateadd(DAY,1-DATEPART(WEEKDAY,'2012-01-01'),'2012-01-01')仍然给我错误我始终避免使用datefirst。在函数中使用时,每次调用该函数时都需要设置它。如果在使用DATEFIRST之前忘记设置它,它通常会在不同的服务器上以不同的默认值给出不同的结果-正如您在这里已经体验到的那样。总有一个更好的解决办法是给出答案2012-01-01,而不是2011-12-26。MSSQL的答案相当不透明。如果我在生产代码中看到了这一点,我会将其重写为更明显一点。我赞同@BenThul@BenThul无论如何,这是最好的解决方案。然而,将其转换为varchar是一个巨大的错误。该日期不再是日期。这是唯一不依赖DATEFIRST的答案。我取消了我的答案,因为我意识到它是正确的。它很像你的,只是短了一点。谢谢你的回答!!短和区域独立@Giosco我的计算中有个错误。已经纠正了。现在一周从星期一开始,而不是星期天。这不取决于日期,我认为这是一个很大的错误。如果函数中有此项,则每次调用函数时都将强制设置DATEFIRST。@SQLPolice我的一周从周一开始。我只是浏览了我最初的答案,并意识到没有bug。是的,这是一个正确的解决方案。“0”(datediff中的第二个操作数)表示1900年1月1日——碰巧,20世纪始于周一。(这很酷;)所以你基本上计算了1900-01-01以来的完整周数,然后把这些周加到1900年1月1日星期一。这样,你就得到了最后一个星期一。
SELECT dateadd(week, datediff(d, 0, getdate())/7, 0)
    SET DATEFIRST 1
    SELECT DATEADD(DAY,1-DATEPART(WEEKDAY,'2012-01-01'),'2012-01-01')