SQL 语句选择前一天的所有行

我正在寻找一个好的 SQL 语句,从一个表中选择前一天的所有行。该表包含一个日期时间列。我正在使用 SQLServer2005。

484918 次浏览

现在还不能测试,但是:

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

要在 SQL 中获取“ today”值:

convert(date, GETDATE())

得到“昨天”:

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

要得到“ today-X days”: 将 -1改为 -X。

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

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

没有时间得到今天:

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

得到昨天没有时间:

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)

这是一个非常古老的线索,但这里是我对它的看法。 不是两个不同的分句,一个大于一个小于。我使用下面的语法从日期中选择记录。如果你想要一个日期范围,那么以前的答案是去的方式。

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

在上述情况下,对于昨天的记录,X 将为 -1

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

另一种说法是“昨天”。

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

这可能不会在1月1日,以及每个月的第一天很好地工作。但在飞行中它是有效的。

看来显而易见的答案不见了。要从列(DatetimeColumn)为带有时间戳的日期时间的表(Ttable)中获取所有数据,可以使用以下查询:

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

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

这个应该可以:

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

在 SQLServer 中这样做:

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

为了避免时间格式问题,应该对表达式的两边都进行强制转换。

如果您需要更详细地控制间隔,那么您应该尝试这样的操作:

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

将 datetime 列转换为 date 并进行比较更容易。

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))

Subdate (now () ,1)将返回昨天的时间戳 下面的代码将选择具有昨天时间戳的所有行

Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)

一个简单的选择

Select GETDATE() - 1

换1回去那么多天

PS: 这样可以提供时间戳的准确性。

这招奏效了:

SELECT * FROM mytable WHERE date(mydate) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);