Sql server 用于选择未来日期的所有记录的T-SQL语句

Sql server 用于选择未来日期的所有记录的T-SQL语句,sql-server,date,Sql Server,Date,我需要选择从现在起15天内有账单日期的所有记录。 这并没有给我任何信息,因为它试图比较日期和时间: "nextbill = dateadd(d, +15, getdate())" 这项工作: "select * from custrate where nextbill >= '2014-01-02 00:00:00' and nextbill < '2014-01-02 23:59:59'" “选择* 从卡斯特拉特 其中nextbill>=“2014-01-02 0

我需要选择从现在起15天内有账单日期的所有记录。
这并没有给我任何信息,因为它试图比较日期和时间:

 "nextbill = dateadd(d, +15, getdate())"  
这项工作:

"select * 
from custrate 
where nextbill >= '2014-01-02 00:00:00' and nextbill < '2014-01-02 23:59:59'"  
“选择*
从卡斯特拉特
其中nextbill>=“2014-01-02 00:00:00”和nextbill<“2014-01-02 23:59:59”
如果从现在起15天不考虑时间,我怎么能得到所有东西

select * 
from custrate 
where convert(date,nextbill) = DATEADD(d, 15, convert(date,getdate()))
或sql的旧版本:

select * 
from custrate 
where DATEADD(dd, DATEDIFF(dd, 0, nextbill), 0) = DATEADD(dd, DATEDIFF(dd, 0, getdate()), 15)
或sql的旧版本:

select * 
from custrate 
where DATEADD(dd, DATEDIFF(dd, 0, nextbill), 0) = DATEADD(dd, DATEDIFF(dd, 0, getdate()), 15)

我会用
>=
作为一天的开始,用
=@from和nextbill作为第二天的开始

我会用
=
作为一天的开始,用
=@from和nextbill作为第二天的开始


注-2014-01-02是从今天(2013-12-17)算起的16天,SQL Server使用的SQL方言是“T-SQL”(或“Transact-SQL”)。SQL Server的哪个版本?注-2014-01-02是从今天(2013-12-17)算起的16天,SQL Server使用的SQL方言是“T-SQL”(或“Transact-SQL”)。SQL Server的哪个版本?您必须使用旧版本;为旧版本添加的解决方案请参阅我答案中的第二个查询。这两个问题都是坏消息。虽然第一个可以使用索引,但这只是巧合——在大多数情况下,您永远不想将函数应用于表达式的列端。在这种情况下。第二种方法在很大程度上违反了这种做法——这将导致扫描,即使在可能使用搜索的情况下也是如此。()您必须使用旧版本;为旧版本添加的解决方案请参阅我答案中的第二个查询。这两个问题都是坏消息。虽然第一个可以使用索引,但这只是巧合——在大多数情况下,您永远不想将函数应用于表达式的列端。在这种情况下。第二种方法在很大程度上违反了这种做法——这将导致扫描,即使在可能使用搜索的情况下也是如此。()。这将获得两天的数据。+1开放范围绝对是检索一天(或一个范围)所有数据的最有效和最安全的方法。取效率点。为什么开放式范围是“最安全的”?所选答案是否“不安全”?所选答案不是不安全的,只是保证其性能与任何解决方案一样差。开放式范围是最安全的OMHO,因为它对底层数据类型更改不敏感。很多人会在开始和日期之间添加数据(毫秒,-3,结束),这是非常不安全的。@user210757查看,这将获得两天的数据。+1开放范围绝对是检索一天(或一个范围)所有数据的最有效和最安全的方法。取得了效率点。为什么开放式范围是“最安全的”?所选答案是否“不安全”?所选答案不是不安全的,只是保证其性能与任何解决方案一样差。开放式范围是最安全的OMHO,因为它对底层数据类型更改不敏感。很多人会在开始和日期之间(毫秒,-3,结束),这是非常不安全的。@user210757请参见和