这条SQL语句是说前一天还是第二天?
我们有一个旧的sql脚本,它看起来是从前一天获取数据的。因此,在我们的表中有一个dateplace列,我们希望能够获取从运行到前一天的所有记录。谢谢你的帮助这条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',
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;