SQL显示|从今天的日期选择数据|目前每天只有

问题描述:

我有这个疑问,它假设显示从当前日期(今天)数据只SQL显示|从今天的日期选择数据|目前每天只有

SELECT * FROM Customer WHERE visitTime <= GETDATE() AND visitTime > GETDATE() - 1 

其中visitTime日期时间

但它不能很好地工作,因为我认为,问题出在AND visitTime > GETDATE() - 1但我不知道如何解决这个问题,任何人有什么建议吗?

+0

的可能重复[获取行,其中datetime列=今天 - SQL服务器小白](http://stackoverflow.com/questions/2583228/get-行其中,日期时间列,今日-SQL服务器小白) – bummi 2014-10-16 22:09:46

请看下面的例子:

declare @visitTime datetime ='2014-10-16 23:59:59.000' 
select GETDATE() GETDATE, @visitTime visitTime, GETDATE() - 1 [GETDATE-1] 

GETDATE     visitTime    GETDATE-1 
2014-10-17 00:02:18.980 2014-10-16 23:59:59.000 2014-10-16 00:02:18.980 

你会看到visittime日期明确指定为下限(-1)的范围落在减去一整天,而不仅仅是一部分时间。

你也可以使用这样的:

-- using GETDATE() for the upper bound misses visitTime that are 
-- on the current day, but at a later time than now. 
WHERE visitTime < DateAdd(Day, DateDiff(Day, 0, GetDate())+1, 0) 
AND visitTime >= DateAdd(Day, DateDiff(Day, 0, GetDate()), 0) 

,或者如果你的SQL Server上2008+具有date数据类型,这样的:

WHERE CAST(visitTime AS DATE) = CAST(GETDATE() AS DATE) 

注意GETDATE()是T-SQL具体而言,ANSI相当于是CURRENT_TIMESTAMP

+1

我喜欢它了很多,当你不仅发布答案,但还举例解释。大! – 2014-10-16 23:06:25

+0

不错的一个CAST(GETDATE()AS DATE)' – 2016-01-22 12:28:15

假设今天是昨天午夜到午夜今晚,你可以使用以下条件

Select * from Customer where 
visitTime >= DateAdd(d, Datediff(d,1, current_timestamp), 1) 
and 
visitTime < DateAdd(d, Datediff(d,0, current_timestamp), 1); 

SELECT * FROM Customer WHERE visitTime > = convert(date,getdate()) 
and visitTime < dateadd(d,1,convert(date,getdate())) 

检查了这一点

select * 
from Customers 
where convert(date,createddate) = convert(date,getdate());