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”之后存在的信息
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'