SQL Query将返回日期限制为当前月份

Shr*_*ut1 3 datetime filter getdate sql-server-2008

我试图将我返回的数据限制为仅包含当前月份中的开始日期和结束日期的那些点 - 活动项目.它的行为有问题,因为今天是这个月的最后一天.我相信明天也会出现问题(样本中没有6月的数据).

这是我的数据集(表1):

Project                      User                 Effort  Start_Date End_Date
-------                      -------              ------  --------   --------
Traffic Control              DOMAIN\john.smith    0.1     5/1/2013   5/31/2013
Turboencabulator Analysis    DOMAIN\mark.webber   0       5/1/2013   5/31/2013
Widget Calibration           DOMAIN\mark.webber   0       5/1/2013   5/31/2013
Gizmo Creation               DOMAIN\steve.green   0.1     5/1/2013   5/31/2013
Advanced Toolmaking          DOMAIN\steve.green   0.6     5/1/2013   5/31/2013
Diesel Engine Diagnostics    DOMAIN\steve.green   0.05    5/1/2013   5/31/2013
Cold Fusion Reactor Creation DOMAIN\steve.green   0.3     5/1/2013   5/31/2013
Run Code Online (Sandbox Code Playgroud)

今天使用以下查询时,我没有返回结果:

SELECT * FROM dbo.table1
WHERE Start_Date <= (getdate()) AND End_Date >= (getdate())
ORDER BY User, Start_Date
Run Code Online (Sandbox Code Playgroud)

昨天回来很好.我也有六月的数据(没有在我的样本中显示)但我需要修改我的声明,以便它可以在整个月中可靠地返回当月的数据.

答案 - 纠正WHERE陈述(来自下面的答案中的评论):

WHERE (Month(Start_Date) <= Month((getdate())) AND Month(End_Date) >= Month((getdate()))) AND (YEAR(Start_Date) <= YEAR((getdate())) AND YEAR(End_Date) >= YEAR((getdate())))
Run Code Online (Sandbox Code Playgroud)

Yur*_*ter 10

使用TSQL Month功能:

SELECT * FROM dbo.table1
WHERE Month(Start_Date) = Month(getdate()) AND Month(End_Date) = Month(getdate())
ORDER BY User, Start_Date
Run Code Online (Sandbox Code Playgroud)

  • 所以你不关心这一年?任何梅都会这样做? (7认同)
  • @Shrout1 在这种情况下,您也可以添加对 `YEAR()` 函数的检查 (2认同)

小智 7

只需将您的WHERE陈述合并为:

DATEDIFF(m, DATEFIELD, GETDATE()) = 0
Run Code Online (Sandbox Code Playgroud)