代码之家  ›  专栏  ›  技术社区  ›  Kwebble

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

  •  98
  • Kwebble  · 技术社区  · 5 年前

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

    11 回复  |  直到 5 年前
        1
  •  176
  •   KM.    15 年前

    今天没时间了:

    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)
    
        2
  •  32
  •   Konamiman    15 年前

    要在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())
    
        3
  •  16
  •   call me Steve    9 年前

    很明显答案是不见了。要从表(ttable)中获取所有数据,其中列(datetime column)是带时间戳的datetime,可以使用以下查询:

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

    这很容易改成今天、上个月、去年等。

        4
  •  8
  •   Romancha KC    11 年前
    SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
    
        5
  •  5
  •   rahul    12 年前

    这是一条很老的线索,但这是我的看法。 而不是两个不同的条款,一个大于和小于。我使用下面的语法从日期中选择记录。如果你想要一个日期范围,那么前面的答案是正确的。

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

    在上述情况下,昨天的记录x将是-1

        6
  •  4
  •   Mark Bell    15 年前

    现在无法测试,但是:

    select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
    
        7
  •  2
  •   candlejack    9 年前

    这应该做到:

    WHERE `date` = CURDATE() - INTERVAL 1 DAY
    
        8
  •  2
  •   Mário Meyrelles    9 年前

    在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)
    
        9
  •  1
  •   user3428292    10 年前

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

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

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

        10
  •  1
  •   Amey P Naik    6 年前

    好吧,将datetime列转换为date比比较容易。

    SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
       dateadd(day,0, convert(date, getdate(), 105)) 
    
        11
  •  0
  •   Dismi Paul    5 年前

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

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