关于PreparedStatement日期类型比较的一些问题

问题是这样的:

数据库储存的字段类型是时间类型,而用户需要根据时间区间来进行查询。例如:
表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来转。

oo

3个回答

要查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 < ?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问