我在包安装程序中运行了以下查询,该查询在包含以下列的表中获取前一天的记录:
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本身的自动插入日期。
答案 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()));