我正在寻找一个好的 SQL 语句,从一个表中选择前一天的所有行。该表包含一个日期时间列。我正在使用 SQLServer2005。
现在还不能测试,但是:
select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)
要在 SQL 中获取“ today”值:
convert(date, GETDATE())
得到“昨天”:
DATEADD(day, -1, convert(date, GETDATE()))
要得到“ today-X days”: 将 -1改为 -X。
因此,对于所有昨天的行,你得到:
select * from tablename where date >= DATEADD(day, -1, convert(date, GETDATE())) and date < convert(date, GETDATE())
没有时间得到今天:
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 * FROM TABLE_NAME WHERE DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
在上述情况下,对于昨天的记录,X 将为 -1
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
另一种说法是“昨天”。
Select * from TABLE where Day(DateField) = (Day(GetDate())-1) and Month(DateField) = (Month(GetDate())) and Year(DateField) = (Year(getdate()))
这可能不会在1月1日,以及每个月的第一天很好地工作。但在飞行中它是有效的。
看来显而易见的答案不见了。要从列(DatetimeColumn)为带有时间戳的日期时间的表(Ttable)中获取所有数据,可以使用以下查询:
SELECT * FROM Ttable WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
这可以很容易地改变到今天,上个月,去年等。
这个应该可以:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
在 SQLServer 中这样做:
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 列转换为 date 并进行比较更容易。
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = dateadd(day,0, convert(date, getdate(), 105))
Subdate (now () ,1)将返回昨天的时间戳 下面的代码将选择具有昨天时间戳的所有行
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
一个简单的选择
Select GETDATE() - 1
换1回去那么多天
PS: 这样可以提供时间戳的准确性。
这招奏效了:
SELECT * FROM mytable WHERE date(mydate) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);