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

rud*_*ter 107 sql sql-server sql-server-2005

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

KM.*_*KM. 192

今天没有时间:

SELECT dateadd(day,datediff(day,0,GETDATE()),0)
Run Code Online (Sandbox Code Playgroud)

得到昨天没有时间:

SELECT dateadd(day,datediff(day,1,GETDATE()),0)
Run Code Online (Sandbox Code Playgroud)

仅查询昨天的所有行:

select 
    * 
    from yourTable
    WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
        AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
Run Code Online (Sandbox Code Playgroud)

  • @RasmusBidstrup,是的。当我运行 `SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)` 我得到:`2016-02-01 10:27:54.733 2016-01-31 00:00: 00.000` (2认同)

Kon*_*man 39

要在SQL中获取"今天"值:

convert(date, GETDATE())
Run Code Online (Sandbox Code Playgroud)

得到"昨天":

DATEADD(day, -1, convert(date, GETDATE()))
Run Code Online (Sandbox Code Playgroud)

要获得"今天减去X天":将-1更改为-X.

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

select * from tablename
   where date >= DATEADD(day, -1, convert(date, GETDATE()))
   and date < convert(date, GETDATE())
Run Code Online (Sandbox Code Playgroud)


cal*_*eve 16

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

SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Run Code Online (Sandbox Code Playgroud)

这很容易改变到今天,上个月,去年等.

  • 这个效果很好,但与`DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0 相比要贵得多)` 因为它必须评估每一行的 DATEDIFF() (5认同)

Rom*_* KC 8

SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Run Code Online (Sandbox Code Playgroud)


Rah*_*hul 5

它是一个非常古老的线程,但这是我对它的看法.而不是两个不同的条款,一个大于和小于.我使用以下语法从A日期中选择记录.如果你想要一个日期范围,那么之前的答案是要走的路.

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,对于昨天的记录,X将为-1


can*_*ack 5

这应该这样做:

WHERE `date` = CURDATE() - INTERVAL 1 DAY
Run Code Online (Sandbox Code Playgroud)