我有以下查询,
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')
为什么第一个查询没有返回任何结果?如果我有任何错误请纠正我。
答案 0 :(得分:35)
您的日期与时间有关吗? 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')
如果你想搜索18日的整个一天。
SQL DATETIME字段有毫秒。所以我在场上加了999。
答案 1 :(得分:5)
第二个查询是从第17个返回结果还是从第18个结果返回?
第一个查询只会返回17日或18日午夜的结果。
试试这个
select *
from LOGS
where check_in >= CONVERT(datetime,'2013-10-17')
and check_in< CONVERT(datetime,'2013-10-19')
答案 2 :(得分:2)
您的任何一个查询都没有任何错误。 我的猜测如下:
答案 3 :(得分:0)
您需要将日期字段转换为varchar以消除时间,然后将其转换回日期时间,这会将时间重置为00:00:00.000&#39;。
SELECT *
FROM [TableName]
WHERE
(
convert(datetime,convert(varchar,GETDATE(),1))
between
convert(datetime,convert(varchar,[StartDate],1))
and
convert(datetime,convert(varchar,[EndDate],1))
)
答案 4 :(得分:0)
从Sql Server 2008开始,您有“日期”格式。
所以你可以使用
SELECT * FROM LOGS WHERE CONVERT(date,[CHECK_IN]) BETWEEN '2013-10-18' AND '2013-10-18'
https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql