2012-08-24 44 views
0

我曾在一个包的设置是得到了前一天的记录,其中包括以下列的表运行下面的查询:SQL表结果前一天不准确

url, author, dateadded 

现在的设置DateAdded是日期时间格式如下2012年8月23日23:58:42.000和查询,如下所示:

SELECT [authorUrl],[author], 
[dateadded] 
FROM [Feeds].[dbo].[DataFeed] 
where dateadded > dateadd(day,datediff(day, 0, getdate()-1), 0) 
and dateadded < dateadd(day,datediff(day, 0, getDate()), 0) 

现在这个查询的数量不符合下面的查询,我将不得不每天改变的计数插入日期:

SELECT [authorUrl] 
    ,[author] 
     ,[dateadded] 
FROM [Feeds].[dbo].[DataFeed] 
where dateadded > '2012-08-22 23:59:59' and dateadded < '2012-08-23 23:59:59' 

有什么我在这里失踪?

也许我应该强调dateadded列是我编辑(从应用程序插入),而不是由sql本身自动插入日期。

回答

1

停止使用奇怪的边缘和日期范围的不必要的复杂表达式。既然你是在2008年,正确的方式得到昨天是:

DECLARE @d DATE = SYSDATETIME(); 

SELECT ... FROM ... 
    WHERE DateAdded >= DATEADD(DAY, -1, @d) 
    AND DateAdded < @d; 

或者你可以采取的一个事实,即SQL Server 2008中,使此查询优化搜索的优势(这不工作在几乎所有其他你能情况想象一下):

SELECT ... FROM ... 
    WHERE CONVERT(DATE, DateAdded) 
    = DATEADD(DAY, -1, CONVERT(DATE, SYSDATETIME())); 
+0

欣赏的响应,第一个建议不为我工作,我得到例如50万条记录回来(我不明白为什么,也许我应该强调的设置dateAdded列是一个我编辑而不是由sql自动插入日期),当我使用硬编码日期查询时,我得到2000000条记录,如我所料。现在第二个建议更好,但是大约有30000短。 – vbNewbie

+0

什么是DateAdded列的数据类型?你说“日期时间格式”,但数据类型真的是日期时间?如果这两个查询返回不同的结果,那么表或查询存在严重错误,或者存在您未告诉我们的信息。 –

+0

dateadded列具有数据类型datetime格式。我只是觉得我发现了这个问题。当测试你的查询时,我添加了一个group by子句,当我删除结果时很好。所以谢谢一堆。 – vbNewbie