Datetime BETWEEN语句在SQL Server中不起作用

Abl*_*ias 15 sql-server between sql-server-2008

我有以下查询,

SELECT * FROM LOGS 
WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18')
Run Code Online (Sandbox Code Playgroud)

此查询不返回任何结果,但以下查询返回结果,

SELECT * FROM LOGS WHERE CHECK_IN >= CONVERT(datetime,'2013-10-17')
Run Code Online (Sandbox Code Playgroud)

为什么第一个查询没有返回任何结果?如果我有任何错误请纠正我.

小智 41

你有时间与你的约会相关吗?BETWEEN是包容性的,但当您将2013-10-18转换为日期时,它将变为2013-10-18 00:00:000.00.除非您包含时间值,否则在18日的第一秒之后记录的任何内容都不会使用BETWEEN显示.

尝试:

SELECT * FROM LOGS WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18 23:59:59:999')
Run Code Online (Sandbox Code Playgroud)

如果你想搜索18日的整个一天.

SQL DATETIME字段有毫秒.所以我在场上加了999.


pod*_*ska 5

第二个查询是从第17个返回结果还是从第18个结果返回?

第一个查询仅返回18日或18日午夜的结果.

试试这个

select * 
from LOGS 
where check_in >= CONVERT(datetime,'2013-10-17') 
and check_in< CONVERT(datetime,'2013-10-19')
Run Code Online (Sandbox Code Playgroud)


mau*_*rox 5

从 Sql Server 2008 开始,您拥有“日期”格式。

所以你可以使用

SELECT * FROM LOGS WHERE CONVERT(date,[CHECK_IN]) BETWEEN '2013-10-18' AND '2013-10-18'
Run Code Online (Sandbox Code Playgroud)

https://learn.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql