我正在寻找一个好的SQL语句以从一个表中选择前一天的所有行。该表包含一个datetime列。我正在使用SQL Server 2005。
我正在寻找一个好的SQL语句以从一个表中选择前一天的所有行。该表包含一个datetime列。我正在使用SQL Server 2005。
Answers:
今天没有时间:
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 getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
我得到:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
要在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())
似乎没有答案。要从表(Ttable)中获取所有数据,该表的列(DatetimeColumn)是带有时间戳的日期时间,可以使用以下查询:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
可以轻松地将其更改为今天,上个月,去年等。
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
,因为它必须评估各行上DATEDIFF()
应该这样做:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
在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)
好吧,将datetime列转换为日期并比比较容易。
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
SELECT *
会返回带有原始时间的任何日期。