今天遇到了條件中使用時間參數,數據庫是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");
}