只有当前周的日期

时间:2015-01-23 11:56:09

标签: sql sql-server date

我使用以下Query来显示表格中当前日期中日期所在的条目。我需要将其更改为仅显示从当前日期到本周末,而不是漏洞周。

SET DATEFIRST 1 
SELECT distinct Initials
FROM Scheme
WHERE CONVERT(datetime, Dato, 105) >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND convert(datetime, Dato, 105) <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate()))
AND RoomId = ? AND Initials IS NOT NULL

2 个答案:

答案 0 :(得分:1)

有点不同但更有效的方法:

SELECT distinct Initials
FROM Scheme
WHERE Dato >= cast(current_timestamp as date) -- currentdate
AND Dato <  dateadd(d, datediff(d, -7, current_timestamp)/7*7, 0)--end of week
AND RoomId = ? AND Initials IS NOT NULL

我认为Dato被定义为日期或日期时间。否则,您可能会遇到一些性能问题,但这不起作用。

答案 1 :(得分:0)

dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 这意味着:将1-datepart(dw, getdate())天添加到当前日期。 这意味着1-datepart(dw, getdate()):转到当前周的开始日期。

但您只需要当前日期CONVERT(date,getdate())

只需将您的代码更改为:

SET DATEFIRST 1 
SELECT distinct Initials
FROM Scheme
WHERE CONVERT(datetime, Dato, 105) >= CONVERT(date,getdate()) 
AND convert(datetime, Dato, 105) <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate()))
AND RoomId = ? AND Initials IS NOT NULL