在SQL中比较一年中的数字天数

在SQL中比较一年中的数字天数,sql,sql-server,getdate,Sql,Sql Server,Getdate,我正在开发一个SQL存储过程,需要确定表中存储的日期是否大于或等于当前日期后的15天 我想到的第一件事是在WHERE子句中使用以下内容: DAY(GETDATE()) <= DAY(tableName.dateValue) - 15 DAY(GETDATE())您应该使用Datediff 返回指定的开始日期和结束日期之间交叉的指定日期部分边界的计数(有符号整数)。 比如说 select DATEDIFF(DAY,getDATE(),tableName.dateValue) 将返回

我正在开发一个SQL存储过程,需要确定表中存储的日期是否大于或等于当前日期后的15天

我想到的第一件事是在WHERE子句中使用以下内容:

DAY(GETDATE()) <= DAY(tableName.dateValue) - 15
DAY(GETDATE())您应该使用Datediff

返回指定的开始日期和结束日期之间交叉的指定日期部分边界的计数(有符号整数)。 比如说

 select DATEDIFF(DAY,getDATE(),tableName.dateValue)  
将返回实际日期和存储日期之间的差值(以天为单位)

select   * from 
tableName 
where DATEDIFF(DAY,getDATE(),tableName.dateValue) >= 15

这在一个大的表中可能会很慢,因此您更愿意使用Aaron Bertrand注释/答案

您可以使用
DATEDIFF()

但要使查询可搜索,条件不应对列进行任何计算:

WHERE tableName.dateValue >= DATEADD(day, 15, CONVERT(DATE, GETDATE())) ;
将给出当前日期和其他日期之间的天数

其中DATEDIFF(DAY,table.dateValue,getdate())>=-15


应该为您提供答案。

我认为这是您需要的逻辑:
其中tableName.dateValue>=DATEADD(DAY,15,CONVERT(DATE,GETDATE())-作为奖励,它将是可销售的。您可能需要使用16而不是15,这取决于“十五天后”的确切含义。…@AaronBertrand在您的查询中,您应该添加-15天,而不是15天+15days@SQL.injection不同意。OP声明:
表中存储的日期大于或等于当前日期后的十五天。
@AaronBertrand ach所以,我读这个问题太快了。没有意识到日期是在未来。拜托-这与性能无关。如果您担心性能,请确保datetime列上有一个覆盖索引来支持此查询,并停止担心诸如用于派生运行时常量的表达式之类的小事情。不好的原因有两个:(1)(2)这不是可搜索的-即使
dateValue
上存在索引,此查询仍需扫描整个表。@Abbath,您可以随时编辑您的答案-尤其是当有人评论您的错误或遗漏时。@ypercube感谢您的编辑,但我甚至不知道“sargable”是什么,也不觉得将其放在我的答案中是100%舒服的。今天比较起来,不太舒服(比如说,2015年2月26日)到表中日期所在月份的第二天(如果该日期是2015年3月14日,那么你说的是DATEDIFF(day,today,14),也就是DATEDIFF(day,today,1900-01-15)。@AaronBertrand根据我得到的信息,他存储了日期,并使用day()进行比较函数来获得一天part@Smog请尝试您的代码。它不起作用。他想获取存储日期大于等于15天后的所有行。停止思考他的代码当前所说的内容。@AaronBertrand感谢修复的反馈,我认为您应该回答您的评论:)
WHERE tableName.dateValue >= DATEADD(day, 15, CONVERT(DATE, GETDATE())) ;
DATEDIFF(DAY, table.dateValue, getdate())