前一天的SQL表结果不准确

时间:2012-08-24 16:23:29

标签: sql-server-2008 datetime-format

我在包安装程序中运行了以下查询,该查询在包含以下列的表中获取前一天的记录:

url, author, dateadded

现在dateadded的日期时间格式如下:2012-08-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 个答案:

答案 0 :(得分: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()));