无法从数据库中按日期获取记录。
从上面的对话中可以看出,问题是由于数据库中的日期字段的数据类型为datetime而不是date造成的。由于查询条件中只包含日期部分,所以使用cast函数将datetime字段转换为date类型进行比较。
解决方法1:将datetime字段转换为date类型进行比较
Select * from table t1 where cast(t1.date as date) between '2016-05-11' and '2016-05-13'
解决方法2:使用大于或小于进行比较
Select * from table t1 where t1.date >= '2016-05-11' and t1.date < '2016-05-14'
其中,解决方法1适用于数据类型为date的字段,而解决方法2适用于数据类型为datetime的字段。
在对话中还提到了使用IN查询的方法,但是由于IN查询要求精确匹配,所以在这种情况下不适用。
对话中还讨论了查询结果为空的原因,可能是在指定的日期范围内没有记录存在。最后,对话中还表达了对寻找其他替代方法的希望。
问题:无法通过日期从数据库中获取记录。
原因:该问题出现的原因是使用的数据库中的数据类型为"datetime"而不是"date"。
解决方法:将查询语句中的数据类型"date"改为"datetime"。
文章如下:
在使用以下查询语句时,你可以使用下面的查询语句,但是你的查询语句也是正确的,并且在我的服务器上运行正常。
Select * from table t1 where t1.date between '20160511 00:00:00' and '20160513 23:59:59'; select * from table t1 where cast(t1.date as date) IN ('20160511');
如果数据库中的数据类型为"date",那么它是可以正常工作的,但是如果数据类型为"datetime",那么它将无法正常工作。
你使用的是哪个服务器版本?
sql server 2008 R2
在SQL server 2008 R2上,我已经测试过了,并且它可以正常运行。