这条SQL语句是说前一天还是第二天?

这条SQL语句是说前一天还是第二天?,sql,sql-server,Sql,Sql Server,我们有一个旧的sql脚本,它看起来是从前一天获取数据的。因此,在我们的表中有一个dateplace列,我们希望能够获取从运行到前一天的所有记录。谢谢你的帮助 where DATEDIFF(DAY,[DatePlaced],GETDATE()) = 1 意思是昨天 今天是2013-07-17。我已运行以下查询以验证: select datediff(day,'2013-07-16',getdate()) --returns 1 select datediff(day,'2013-07-18',

我们有一个旧的sql脚本,它看起来是从前一天获取数据的。因此,在我们的表中有一个dateplace列,我们希望能够获取从运行到前一天的所有记录。谢谢你的帮助

where  DATEDIFF(DAY,[DatePlaced],GETDATE()) = 1
意思是昨天

今天是
2013-07-17
。我已运行以下查询以验证:

select datediff(day,'2013-07-16',getdate()) --returns 1
select datediff(day,'2013-07-18',getdate()) --returns -1
有关详细信息,请参阅:


啊,别这样。对列应用函数意味着任何索引都相对无用。要获取昨天(或任何范围)的数据,请尝试:

DECLARE@today DATE=SYSDATETIME();
...
其中DatePlaced>=DATEADD(天,-1,@today)
并于今日公布日期;;
如果您使用的是像SQL Server 2005这样的旧版本,请改为:

DECLARE @today DATETIME;
SET @today = DATEDIFF(DAY, 0, GETDATE());

...
  WHERE DatePlaced >= DATEADD(DAY, -1, @today)
    AND DatePlaced <  @today;
DECLARE@today-DATETIME;
设置@today=DATEDIFF(DAY,0,GETDATE());
...
其中DatePlaced>=DATEADD(天,-1,@today)
并于今日公布日期;;

如果
DatePlaced
为yesterday,则返回true注意,在第一个示例中,它将包括截至今天当前时间的所有时间作为查询的一部分,并且仅包括在该时间(昨天)之后的昨天部分。您可能希望截断第一段代码中的时间部分。即,第一段代码将包括2013年7月16日14:40-2013年7月17日14:40,而第二段代码将包括整个2013年7月16日,从2013年7月17日起没有任何内容。@Lasse不,不会;你看了代码还是试过了?它本质上是
CONVERT(DATE
,它消除了时间。很抱歉,我错过了@today变量的
DATE
类型,是的,我尝试了“It”,但当然我尝试了
DATETIME
,因为我本质上是拿了你的第二个示例并重写了它。@Lasse Ctrl+C是你的朋友。
DECLARE @today DATE = SYSDATETIME();

...
  WHERE DatePlaced >= DATEADD(DAY, -1, @today)
    AND DatePlaced <  @today;
DECLARE @today DATETIME;
SET @today = DATEDIFF(DAY, 0, GETDATE());

...
  WHERE DatePlaced >= DATEADD(DAY, -1, @today)
    AND DatePlaced <  @today;