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

时间:2009-10-01 11:11:07

标签: sql sql-server sql-server-2005

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

12 个答案:

答案 0 :(得分:182)

今天没时间:

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)

答案 1 :(得分:36)

要在SQL中获取“today”值:

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())

答案 2 :(得分:16)

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

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

这很容易改为今天,上个月,去年等等。

答案 3 :(得分:8)

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

答案 4 :(得分:5)

这是一个非常古老的主题,但这是我的看法。 而不是两个不同的条款,一个大于和小于。我使用以下语法从A日期中选择记录。如果你想要一个日期范围,那么以前的答案是可行的。

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

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

答案 5 :(得分:4)

现在无法测试,但是:

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

答案 6 :(得分:3)

这应该这样做:

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

答案 7 :(得分:2)

在SQL Server中这样做:

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)

答案 8 :(得分:1)

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

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

这可能在1月1日以及每个月的第一天都不会有效。但在飞行中它是有效的。

答案 9 :(得分:1)

嗯,更容易将datetime列转换为日期而不是比较。

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

一个简单的替代方案

Select GETDATE() - 1

改1回去那么多天

PS:这为您提供时间戳准确性。