我想从Log
表中选择所有记录,其中DateAndTime
字段值(类型为datetime
)代表前一天,无论是哪一天。
因此,如果今天是2011-06-08,我想选择DateAndTime
大于或等于2011-06-07 00:00:00
且小于2011-06-08 00:00:00
的所有行。
我猜这里潜在的陷阱是它在月1日的行为,因为很明显,像2011-06-00
这样的日期是无效的,应该是2011-05-31
。
对于SQL Server 2008,您可以使用它。
select *
from [log]
where cast(DateAndTime as date) = cast(getdate()-1 as date)
2008年之前,您可以使用此
select *
from [log]
where DateAndTime >= dateadd(d, datediff(d, 0, getdate())-1, 0) and
DateAndTime < dateadd(d, datediff(d, 0, getdate()), 0)
DBA相关:到目前为止,演员阵容是值得怀疑的,但这是个好主意吗?
SELECT * FROM Log
WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)
此示例假定SQL Server:
select *
from log
where convert(varchar(8), DateAndTime , 112) = convert(varchar(8), getdate()-1, 112)
从本质上讲,将日期转换为yyyymmdd(112
参数),然后检查它是否等于昨天的日期(getdate()-1
),也转换为yyymmmdd。
假设SQL Server
declare @today date
set @today = GETDATE()
select * from Log where DateAndTime between DATEADD(dd, -1, @today ) and @today
它应该包括条件运算符,而不是之间的。除此之外,它还包括今天的记录。
Declare @today date
Set @today = GETDATE()
Select YourcolumnNames from log
Where DateAndTime >= DATEADD(dd, -1, @today ) and DateAndTime < DATEADD(dd, -1, @today )
此外,您应该提到列名,并且在select语句中应该避免使用*。这可以提高的性能