无法从数据库中按日期获取记录。

16 浏览
0 Comments

无法从数据库中按日期获取记录。

我有基于id和日期的数据...日期的数据类型是DATETIME。数据库:sql server 2008。\n查询1:\n选择* \n从表t1 \nwhere (t1.date between \'2016-05-11\' and \'2016-05-13\')\n查询2:\n选择* \n从表t1 \nwhere t1.date IN (\'2016-05-11\')\n结果是null,即使我有这个日期的记录\n所以有没有其他方法来获取记录,除了(<=//>=)大于或小于的记录。

0
0 Comments

从上面的对话中可以看出,问题是由于数据库中的日期字段的数据类型为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查询要求精确匹配,所以在这种情况下不适用。

对话中还讨论了查询结果为空的原因,可能是在指定的日期范围内没有记录存在。最后,对话中还表达了对寻找其他替代方法的希望。

0
0 Comments

问题:无法通过日期从数据库中获取记录。

原因:该问题出现的原因是使用的数据库中的数据类型为"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上,我已经测试过了,并且它可以正常运行。

0