如何查找当周第一天的日期

时间:2015-02-18 11:25:22

标签: sql-server tsql

如何在transact-sql(t-sql)中查找当前周的第一天的日期?我们需要使用什么T-SQL语句?

这永远是星期天。例如,如果我们在今天(2015-02-18)或当前周的任何一天运行sql语句,它应该给出结果2015-02-15这是一个星期日。

3 个答案:

答案 0 :(得分:2)

在本周的星期日获取约会的可能方法之一。

SELECT  DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), -1) AS SundayOfCurrentWeek

答案 1 :(得分:2)

使用DATEPART

这取决于服务器的设置,但如果它被配置为认为星期日开始周,那么这将起作用:

SELECT CAST(DATEADD(day, 1-DATEPART(weekday, GETDATE()), GETDATE()) AS date) 
带有weekday参数的

DATEPART给出了星期几。然后从当前日期中减去此数字并转换为date以删除时间部分。

  

当datepart是星期(wk,ww)或工作日(dw)时,返回值   取决于使用SET DATEFIRST设置的值。

     

要查看SET DATEFIRST的当前设置,请使用@@ DATEFIRST   功能。 SET DATEFIRST的设置在执行或运行时设置   而不是在解析时。

所以为了安全起见,请确保将DATEFIRST设置为7(默认为美国英语),这意味着星期日。

使用DATEDIFF

另一种变体使用DATEDIFF

SELECT DATEADD(wk, DATEDIFF(wk, '20150104', GETDATE()), '20150104')

总会在星期天回来。魔术日期20150104可以是星期日的任何日期。

  

指定SET DATEFIRST对DATEDIFF没有影响。 DATEDIFF总是如此   使用星期日作为一周的第一天,以确保功能   确定性的。

一方面它很好,因为即使您忘记设置DATEFIRST,也可以保证周日返回。但是,另一方面,它不灵活,并不适合那些认为周一是一周的第一天(那些不在美国)的人。

答案 2 :(得分:1)

使用此

Select dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) as LastWeekStart
Select dateadd(wk, datediff(wk, 0, getdate()), 0) as ThisWeekStart
Select dateadd(wk, datediff(wk, 0, getdate()) + 1, 0) as NextWeekStart

了解更多信息

GETDATE last month