SQL显示|从今天起选择数据|仅限当天

时间:2014-10-16 21:49:27

标签: sql sql-server datetime

我有这个查询,它假设只显示当前日期(今天)的数据

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

其中 visitTime 日期时间类型

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

5 个答案:

答案 0 :(得分:6)

看看这个例子:

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

您会看到访问时间明确地落在您指定的范围内,因为下限(-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)

如果您使用的是具有date数据类型的SQL Server 2008+,请执行以下操作:

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

请注意,GETDATE()是特定于T-SQL的,ANSI等效项是CURRENT_TIMESTAMP

答案 1 :(得分:1)

假设今天是今晚午夜至午夜,您可以使用以下条件

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

答案 2 :(得分:0)

productName

答案 3 :(得分:0)

检查出来

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

答案 4 :(得分:0)

仅获取迄今为止的详细信息:
SELECT * FROM PRODUCTION WHERE CAST(CREATIONDATE AS DATE) = CAST(GETDATE() AS DATE)