我有一个名为DateFinished的日期时间字段。我需要能够检索DateFinished在当前月/年内的所有记录。
答案 0 :(得分:19)
如果你只有少量的行,那么这样做就可以获得DateFinished
今年这个月的所有行。
SELECT *
FROM MyTable
WHERE Year(DateFinished) = Year(CURRENT_TIMESTAMP)
AND Month(DateFinished) = Month(CURRENT_TIMESTAMP)
虽然这可能会在很多行上变得非常慢 - 在这种情况下使用DateAdd
,DatePart
和BETWEEN
可能更合适,并且可以利用索引(I没有时间写一个涉及现在的答案!)
答案 1 :(得分:11)
作为替代方案 - 这应该使用DateFinished上的索引。
SELECT *
FROM MyTable
WHERE DateFinished BETWEEN
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
AND
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)