如何在transact-sql(t-sql)中查找当前周的第一天的日期?我们需要使用什么T-SQL语句?
这永远是星期天。例如,如果我们在今天(2015-02-18)或当前周的任何一天运行sql语句,它应该给出结果2015-02-15这是一个星期日。
答案 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
了解更多信息