Oracle+MyBatis Plus时间区间搜索

今天遇到了条件中使用时间参数,数据库是Oracle的,查阅MyBatis Plus QueryWrapper 默认提供的几个方式都不行,

这种时间查询

// 预警时间
            if (warning.getWarningTimeParams() != null
                    && warning.getWarningTimeParams().get("beginTime") != null
                    && warning.getWarningTimeParams().get("beginTime") != ""
                    && warning.getWarningTimeParams().get("endTime") != null
                    && warning.getWarningTimeParams().get("endTime") != "") {
                qw.apply("warning_time >= TO_DATE({0}, 'yyyy-MM-dd HH24:mi:ss')", warning.getWarningTimeParams().get("beginTime"));
                qw.apply("warning_time <= TO_DATE({0}, 'yyyy-MM-dd HH24:mi:ss')", warning.getWarningTimeParams().get("endTime"));
            }
            // 处理时间
            if (warning.getUpdateTimeParams() != null
                    && warning.getUpdateTimeParams().get("beginTime") != null
                    && warning.getUpdateTimeParams().get("beginTime") != ""
                    && warning.getUpdateTimeParams().get("endTime") != null
                    && warning.getUpdateTimeParams().get("endTime") != "") {
                qw.apply("update_time >= TO_DATE({0}, 'yyyy-MM-dd HH24:mi:ss')", warning.getUpdateTimeParams().get("beginTime"));
                qw.apply("update_time <= TO_DATE({0}, 'yyyy-MM-dd HH24:mi:ss')", warning.getUpdateTimeParams().get("endTime"));
            }


// dao中的字段
	@TableField(exist = false)
    private Map<String, Object> warningTimeParams;
    @TableField(exist = false)
    private Map<String, Object> updateTimeParams;

上面的oracle数据库中的字段格式是DATE类型的,而随着需求的更改变成了TIMESTAMP类型的,使用上面的方式进行搜索的时候就不太准确了
例如:

数据库中有数据但搜索不到

所以进行了更改

  if (warning.getWarningTimeParams() != null
                    && warning.getWarningTimeParams().get("beginTime") != null
                    && warning.getWarningTimeParams().get("beginTime") != ""
                    && warning.getWarningTimeParams().get("endTime") != null
                    && warning.getWarningTimeParams().get("endTime") != "") {
                // timestamp只支持秒的小数点后面六位,所以这里使用xff6
                qw.apply("warning_time >= TO_TIMESTAMP({0}, 'yyyy-MM-dd HH24:mi:ssxff6')", warning.getWarningTimeParams().get("beginTime") + ".000000");
                qw.apply("warning_time <= TO_TIMESTAMP({0}, 'yyyy-MM-dd HH24:mi:ssxff6')", warning.getWarningTimeParams().get("endTime") + ".999999");
            }
// sql语句
// select * from T_WARNING where WARNING_TIME >= TO_TIMESTAMP('2021-10-24 20:38:56.000000', 'yyyy-MM-dd HH24:mi:ssxff6') and warning_time <= TO_TIMESTAMP('2021-10-24 20:38:56.999999', 'yyyy-MM-dd HH24:mi:ssxff6');

普通的时间搜索

if (device.getParams() != null
		    && device.getParams().get("beginTime") != null
		    && device.getParams().get("beginTime") != ""
		    && device.getParams().get("endTime") != null
		    && device.getParams().get("endTime") != "") {
		qw.between("create_time", device.getParams().get("beginTime") + " 00:00:00", device.getParams().get("endTime") + " 23:59:59");
	    }
posted @ 2021-08-14 16:27  山丘i  阅读(1373)  评论(0编辑  收藏  举报