0

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

url, author, 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' 

我在这里缺少什么吗?

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

4

1 回答 1

1

停止对日期范围使用奇怪的边缘和不必要的复杂表达式。由于您是 2008 年,因此获得昨天的正确方法是:

DECLARE @d DATE = SYSDATETIME();

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

或者,您可以利用 SQL Server 2008 使该查询成为 sargable 的事实(这在您能想象到的几乎所有其他情况下都不起作用):

SELECT ... FROM ...
  WHERE CONVERT(DATE, DateAdded) 
    = DATEADD(DAY, -1, CONVERT(DATE, SYSDATETIME()));
于 2012-08-24T16:41:26.470 回答