问题是这样的:
数据库储存的字段类型是时间类型,而用户需要根据时间区间来进行查询。例如:
表Test有CreateTime这个字段,该字段是datetime类型的,而我的SQL语句是 select * from Test where CreateTime >= ? and CreateTime <= ? 然后用PreparedStatement setDate(new java.sql.Date(QueryDate));传入两个值。这个时候,数据库实际上还是以时间类型进行比较。假如说我查的是2009年12月19日到2009年12月19日,而假设表中有数据有一条数据的CreateTime为2009-12-19 10:02:56.429 那么执行后的结果却没有将该记录查出来。
这样的情况应该如何解决?
我碰到的是不同的数据库,有可能是Oracle也有可能是SQL SERVER,所以别问是什么类型的数据库。
我想应该先将查询的字段转成日期类型的,这样应该就不会出现bug了,可是我不知道能不能直接通过PreparedStatement来转。
要查2009年12月19日这一天的数据,要改开始值2009-12-19 00:00:00,结束值2009-12-19 23:59:59
select * from Test where CreateTime >= to_date(?,时间格式) and CreateTime <= to_date(?,时间格式)
而且PreparedStatement.setString();
2009年12月19日转换成时间类型的话,就变成2009-12-19 00:00:00,所以你这个条件就变成0点0分0秒这一刻,仅仅这一刻。
你要查询一天的数据,需要在结束时间上+1天,在你这里就变成2009年12月20日。然后比较条件中CreateTime <= ?改成CreateTime < ?