2013-12-17 10 views
0

我需要从现在起15天内选择所有带有开票日期的记录。
这给我什么,因为它试图比较日期和时间:用于选择未来日期的所有记录的T-SQL语句

"nextbill = dateadd(d, +15, getdate())" 

这工作:

"select * 
from custrate 
where nextbill >= '2014-01-02 00:00:00' and nextbill < '2014-01-02 23:59:59'" 

我要如何用15天从现在开始忽略了时间的日期一切吗?

+0

注意 - 2014-01-02与今天(2013-12-17)相比是_16_天 – user210757

+0

仅供参考,SQL Server使用的SQL方言是“T-SQL”(或“Transact SQL”)。 –

+0

什么版本的SQL Server? –

回答

-1
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) 
+0

我得到这个错误:类型日期不是一个定义的系统类型。 –

+0

你必须是旧版本;为旧版本添加解决方案 – user210757

+0

是啊...我是... :( –

7

我会用一天的开始与>=第二天的用<开始...

declare @from datetime, @thru datetime; 
set @from = dateadd(d, datediff(d, 0, getdate()) + 15, 0); 
set @thru = dateadd(d, 1, @from); 

select ... 
from custrate 
where nextbill >= @from and nextbill < @thru 
+0

这将获得数据两天。 –

+0

嗯,不,它不会...... ** <** @thru – dotjoe

+3

+1开放式范围绝对是最有效和最安全的方法来检索一天(或范围)的所有数据。 –

相关问题