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");
	    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM