TSQL检索当前月/年的所有记录

kor*_*wan 8 t-sql sql-server datetime

我有一个名为DateFinished的日期时间字段.我需要能够检索DateFinished在当前月/年内的所有记录.

Bri*_*dge 19

如果你只有少量的行,这将使得所有行都DateFinished在今年的这个月.

SELECT * 
FROM MyTable
WHERE Year(DateFinished) = Year(CURRENT_TIMESTAMP) 
                 AND Month(DateFinished) = Month(CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)

这可能会在很多行上变得非常慢 - 在这种情况下使用DateAdd,DatePart并且BETWEEN可能更合适,并且可以利用索引(我没有时间写一个涉及那些的答案!)


Moo*_*ose 11

作为替代 - 这应该使用DateFinished上的索引.

SELECT * 
FROM MyTable
WHERE DateFinished BETWEEN 
     DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
     AND 
     DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)
Run Code Online (Sandbox Code Playgroud)

  • 这包括下个月的第一个,我通过最后一行来避免这种情况:DATEADD(DAY,-1,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+ 1,0)) (4认同)