我是一只斑马
https://blog.csdn.net/JzCm__/article/details/89222537
关于数据库的date类型和java中的时间,相关操作有很多要注意的,这里暂时关于查询某段区间的sql做个简要的说明
看完的后发现使用between and的请留言留下见解
首先
条件1:oracle中的时间类型是date
温馨提示:oracle数据库中如果日期类型使用的是date,java查询后只能查询到yyyy-MM-dd,如果要获取到年月日时分秒,需要把日期类型改为timestamp类型(如果使用spring还可以使用注解方式解决),
那么问题同样出现在保存的时候,这里大家可以写一个 全局类型转换器 下面给大家代码
public Timestamp convert(String source) {
try {
// 判断
if (StringUtils.isEmpty(source)){
return null;
}
// source数据源,转换位java.util.Date日期类型
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(source);
// 创建Timestamp对象
Timestamp timestamp = new Timestamp(date.getTime());
return timestamp;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
**
同样的一只斑马给大家一个更加简单的方法: 只要在对象的属性上添加@DateTimeFormat注解,指定格式,就可以把字符串自动转换为日期
下面回归正题
**
条件2:java代码中传入的是字符串格式的时间"2019-05-14"
条件3:需要在截止日期往后一天,即截至14号,但是在sql中应该是15号(这个和个人需求有关)
oracle的mybatis
<if test="kprqq != null and kprqq != ''">
<![CDATA[and fp.kprq >= to_date(#{kprqq,jdbcType=VARCHAR},'yyyy-mm-dd')]]>
</if>
<if test="kprqz != null and kprqz != ''">
<![CDATA[and fp.kprq < to_date(#{kprqq,jdbcType=VARCHAR},'yyyy-mm-dd') + 1]]>
</if>
MySQL的mybatis
<if test="kprqq != null and kprqq != ''">
<![CDATA[and fp.kprq >= str_to_date(#{kprqq,jdbcType=VARCHAR},'%Y-%m-%d')]]>
</if>
<if test="kprqz != null and kprqz != ''">
<![CDATA[and fp.kprz < DATE_ADD(str_to_date(#{kprqz,jdbcType=VARCHAR},'%Y-%m-%d'), INTERVAL 1 DAY)]]>
</if>
最后,关于传入的时间格式和类型,根据不同的需求做不同的变化;比如:需要精确到分秒,那么数据库函数就应该做出适当的改变,
以及有人想使用between and 等,这个自行参考其它资料,多多分享,或者有发现的在评论下方给出链接。