我有下面的疑问,
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')
为什么第一次查询没有返回任何结果?如果我做错了,请纠正我。
6条答案
按热度按时间unftdfkk1#
您是否有与日期关联的时间?BETWEEN包含两个时间值,但当您将2013 - 10 - 18转换为日期时,它将变为2013 - 10 - 18 00:00:000.00。除非包含时间值,否则在18日的第一秒之后记录的任何内容都不会使用BETWEEN显示。
试试看:
如果你想搜索18号全天,我将毫秒设置为998,因为SQL Server在查询中拉入了2013 - 10 - 19 00:00:00:0000。
SQL DATETIME字段有毫秒,所以我在字段中添加了999。
gfttwv5a2#
第二个查询返回17号的结果,还是只返回18号的结果?
第一个查询将只返回17日或18日午夜的结果。
试试这个
3bygqnnd3#
在SQL Server 2008中,您可以使用"日期"格式。
所以你可以用
https://learn.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql
kokeuurv4#
您的两个查询都没有任何错误。我的猜测如下:
mv1qrgav5#
您需要将日期字段转换为varchar以去除时间,然后将其转换回datetime,这将重置时间为'00:00:00.000'。
2nc8po8w6#