oracle和MySQL结合Mybatis查询某段时间区间的sql

我是一只斑马
https://blog.csdn.net/JzCm__/article/details/89222537
关于数据库的date类型和java中的时间,相关操作有很多要注意的,这里暂时关于查询某段区间的sql做个简要的说明

首先
条件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注解,指定格式,就可以把字符串自动转换为日期
@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 等,这个自行参考其它资料,多多分享,或者有发现的在评论下方给出链接。

猜你喜欢

转载自blog.csdn.net/JzCm__/article/details/90201259