如何只在SQL Server中获取当前周的数据?

son*_*ona 21 sql-server date sql-server-2008

我希望表中的记录存储当前插入记录时的当前日期.

我试过了:

SELECT PId 
,WorkDate 
,Hours          
,EmpId            
FROM Acb       
WHERE EmpId=@EmpId AND WorkDate BETWEEN DATEADD(DAY, -7, GETDATE()) AND GETDATE()
Run Code Online (Sandbox Code Playgroud)

Twi*_*les 27

像这样做:

SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT [...]
AND WorkDate >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND WorkDate <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate()))
Run Code Online (Sandbox Code Playgroud)

说明:

  • datepart(dw, getdate())将返回当前周的日期编号,从1到7,从您使用SET DATEFIRST指定的任何内容开始.
  • dateadd(day, 1-datepart(dw, getdate()), getdate()) 减去到达当周开始的必要天数
  • CONVERT(date,getdate()) 用于删除GETDATE()的时间部分,因为您希望数据从午夜开始.


Hen*_*son 6

一个更好的方法是

select datepart(ww, getdate()) as CurrentWeek
Run Code Online (Sandbox Code Playgroud)

你也可以使用wk而不是ww.

日期部分文档

  • 我知道这很旧(刚刚通过谷歌找到),但这不会返回同一周日期的记录,但来自不同年份吗? (2认同)