【发布时间】:2014-10-10 13:09:50
【问题描述】:
我应该从某个表中选择至少在一年前创建的项目 - 与今天相同的月份和日期。因此,在 2011 年 10 月 10 日、2013 年 10 月 10 日创建的项目将适合,但不适用于 2014 年 10 月 10 日。
以下查询工作正常,但也许有更优雅的方式?提前致谢。
select * from myTable
where
DATEPART(MONTH, CreatedOn) = DATEPART(MONTH, GETDATE()) -- item was created at the same month
and DATEPART(DAY, CreatedOn) = DATEPART(DAY, GETDATE()) -- and at the same day
and DATEDIFF(YEAR, CreatedOn, GETDATE()) >= 1 -- and at least one year ago
【问题讨论】:
-
这将是一个常见的查询还是更罕见/一次性的事情? 2 月 29 日是否应该有任何特殊处理(考虑闰年和非闰年)?
-
仅供参考。如果您在 SELECT 之前声明这些日期值,SQL Server 的执行速度会快得多。将
DATEPART(MONTH,GETDATE())和DATEPART(DAY,GETDATE())之类的内容设置为声明并在您的 select 语句中传递该变量,SQL 的性能将大大提高。 -
@Jason 是的,谢谢
-
@Damien_The_Unbeliever 每天都会执行一次,每天一次。嗯,我忘记了2月29日……那些29日的记录,如果今年2月只有28天的话,也应该是出席事件
标签: sql sql-server-2008 datetime