2012-01-10 79 views
4

我试图选择createDt在过去两周内的所有项目。我试过这段代码,但它不起作用。T-SQL中的相对日期范围

SELECT * FROM dbo.mytable 
WHERE CreateDt > dateadd(d,-15,CreateDt) 

有人能告诉我这样做的正确方法吗?

+1

你能详细说明它是如何工作的吗?另外,你为什么使用15而不是14天? – 2012-01-10 16:28:47

回答

9
WHERE CreateDt > dateadd(d,-15,CreateDt) 

应该

WHERE CreateDt > dateadd(d,-15,getdate()) 

推测。

全部NOT NULLCreateDt的值将满足您当前的条件,因为您将该列与其自己的值减去15天 - 而不是当前日期和时间之前的15天进行比较。

2

“Where createdate>(createdate - 2 weeks)”?我不这么认为;)

试试这个:

... where createdate > dateadd (d, -15, getdate()) 
2

你检查,看看是否CreateDt是之前本身大于15天。我猜你会获得比预期更多的记录。

我会做这样的事情(为便于阅读,主要)

Declare @CheckDate DateTime 
Set @CheckDate = dateadd(d, -15, GetDate()) 

SELECT [Columns] from dbo.mytable WHERE CreateDt > @CheckDate 

须─记得打电话给你的columns-不要使用“SELECT *”在正常情况下。

2

我相信这是你想要的。

SELECT * FROM dbo.mytable 
WHERE CreateDt > dateadd(wk,-2,getdate()) AND 
     CreateDt < getdate() -- possible bad data