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

标签 sql sql-server datetime

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

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

visitTimedatetime 类型

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

最佳答案

看这个例子:

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

关于SQL 显示 |从今天开始选择数据 |仅限当天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414501/

相关文章:

mysql - 将 SQL 更改部署到客户数据库(更改表、函数等)

sql-server - CTE 与额外的日期查找返回 NULL

Python Bokeh 刻度标签

C#例程准时触发

php - 循环检查表中是否存在并生成随机字符串

SQL - 将时间序列事件转换为开/关对(处理可能丢失的开或关)

sql-server - ADOQuery.Locate 慢,创建索引

javascript - HTML 日期 : Get Correct date in yyyy - mm - dd

php - 数据未插入数据库

sql-server - 如何在sql server中用新的替换第二个位置字符串