Sql server Datetime BETWEEN语句在SQL Server中不工作

Sql server Datetime BETWEEN语句在SQL Server中不工作,sql-server,sql-server-2008,between,Sql Server,Sql Server 2008,Between,我有以下疑问, SELECT * FROM LOGS WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18') 此查询不返回任何结果,但以下查询返回结果 SELECT * FROM LOGS WHERE CHECK_IN >= CONVERT(datetime,'2013-10-17') 为什么第一个查询不返回任何结果?如果我有任何错误,请纠正我。您的两个查询都没有

我有以下疑问,

SELECT * FROM LOGS 
WHERE CHECK_IN BETWEEN CONVERT(datetime,'2013-10-17') AND CONVERT(datetime,'2013-10-18')
此查询不返回任何结果,但以下查询返回结果

SELECT * FROM LOGS WHERE CHECK_IN >= CONVERT(datetime,'2013-10-17')

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

您的两个查询都没有任何错误。 我的猜测如下:

  • 2013年10月17日至2013年10月18日期间不存在任何记录
  • 记录第二次查询返回您在“2013-10-18”之后存在的信息

第二个查询是否返回17日的结果,还是仅返回18日的结果

第一个查询将只返回17日或18日午夜的结果

试试这个

select * 
from LOGS 
where check_in >= CONVERT(datetime,'2013-10-17') 
and check_in< CONVERT(datetime,'2013-10-19')
选择*
从日志
其中check_in>=CONVERT(日期时间,'2013-10-17')
并签入
您是否有与日期关联的时间?“介于之间”包含在内,但当您将2013-10-18转换为日期时,它将变为2013-10-18 00:00:000.00。除非包含时间值,否则在18日的第一秒之后记录的任何内容都不会使用BETWEEN显示

尝试:

如果你想搜索18号的全天。我将毫秒设置为998,因为SQL Server在查询中加入了2013-10-19 00:00:00:0000


SQL日期时间字段有毫秒。因此,我在字段中添加了999。

您需要将日期字段转换为varchar以去掉时间,然后将其转换回datetime,这会将时间重置为“00:00:00.000”

SELECT *
FROM [TableName]
WHERE
    (
        convert(datetime,convert(varchar,GETDATE(),1)) 

        between 

        convert(datetime,convert(varchar,[StartDate],1)) 

        and  

        convert(datetime,convert(varchar,[EndDate],1))
    )

在SQLServer2008中,您有“日期”格式

所以你可以用

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

您能从CHECK\u IN>=convert(日期时间,'2013-10-17')的日志中选择前5名CHECK\u IN的结果吗?
SELECT * FROM LOGS WHERE CONVERT(date,[CHECK_IN]) BETWEEN '2013-10-18' AND '2013-10-18'