SQL语句来select前一天的所有行
我正在寻找一个好的SQL语句来从一个表中select前一天的所有行。 该表包含一个date时间列。 我正在使用SQL Server 2005。
得到今天没有时间:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
get yestersday no time:
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)
要在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())
似乎没有明显的答案。 要从列(DatetimeColumn)是具有时间戳的date时间的表(Ttable)中获取所有数据,可以使用以下查询:
SELECT * FROM Ttable WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
这可以很容易地改变到今天,上个月,去年等。
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
它是一个非常古老的线程,但这是我的承担。 而不是两个不同的条款,一个大于和小于。 我用下面的语法从Adateselectlogging。 如果你想要一个date范围,那么以前的答案是要走的路。
SELECT * FROM TABLE_NAME WHERE DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
在上面的情况下,对于昨天的logging,X将是-1
目前无法testing,但是:
select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
另一种方式告诉它“昨天”…
Select * from TABLE where Day(DateField) = (Day(GetDate())-1) and Month(DateField) = (Month(GetDate())) and Year(DateField) = (Year(getdate()))
1月1日以及每个月的第一天,这可想而知。 但在飞行中它是有效的。
这应该做到这一点:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
在SQL Server中是这样做的:
where cast(columnName as date) = cast(getdate() -1 as date)
为了避免时间格式问题,您应该投射expression式的两边以避免问题。
如果您需要更详细地控制时间间隔,那么您应该尝试如下所示:
declare @start datetime = cast(getdate() - 1 as date) declare @end datetime = cast(getdate() - 1 as date) set @end = dateadd(second, 86399, @end)