SQL语句来select前一天的所有行

我正在寻找一个好的SQL语句来从一个表中select前一天的所有行。 该表包含一个date时间列。 我正在使用SQL Server 2005。

得到今天没有时间:

SELECT dateadd(day,datediff(day,0,GETDATE()),0) 

get yestersday no time:

 SELECT dateadd(day,datediff(day,1,GETDATE()),0) 

查询仅来自昨天的所有行:

 select * from yourTable WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0) AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0) 

要在SQL中获取“今天”值:

 convert(date, GETDATE()) 

要获得“昨天”:

 DATEADD(day, -1, convert(date, GETDATE())) 

要获得“今天减去X天”:将-1更改为-X。

因此,对于所有昨天的行,你会得到:

 select * from tablename where date >= DATEADD(day, -1, convert(date, GETDATE())) and date < convert(date, GETDATE()) 

似乎没有明显的答案。 要从列(DatetimeColumn)是具有时间戳的date时间的表(Ttable)中获取所有数据,可以使用以下查询:

 SELECT * FROM Ttable WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday 

这可以很容易地改变到今天,上个月,去年等。

 SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY); 

它是一个非常古老的线程,但这是我的承担。 而不是两个不同的条款,一个大于和小于。 我用下面的语法从Adateselectlogging。 如果你想要一个date范围,那么以前的答案是要走的路。

 SELECT * FROM TABLE_NAME WHERE DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0 

在上面的情况下,对于昨天的logging,X将是-1

目前无法testing,但是:

 select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0) 

另一种方式告诉它“昨天”…

 Select * from TABLE where Day(DateField) = (Day(GetDate())-1) and Month(DateField) = (Month(GetDate())) and Year(DateField) = (Year(getdate())) 

1月1日以及每个月的第一天,这可想而知。 但在飞行中它是有效的。

这应该做到这一点:

 WHERE `date` = CURDATE() - INTERVAL 1 DAY 

在SQL Server中是这样做的:

 where cast(columnName as date) = cast(getdate() -1 as date) 

为了避免时间格式问题,您应该投射expression式的两边以避免问题。

如果您需要更详细地控制时间间隔,那么您应该尝试如下所示:

 declare @start datetime = cast(getdate() - 1 as date) declare @end datetime = cast(getdate() - 1 as date) set @end = dateadd(second, 86399, @end)