mysql使用between and处理时间区间不包括右边界问题
首先需要告诉大家Mysql数据库对于一般int类型边界的包含左右边界。Oracle数据库也是包含左右边界
最近自己写项目发现mysql使用between and处理时间区间不包括右边界。
SELECT * FROM timeline WHERE username = ‘Allen’ AND logTime BETWEEN ‘2017-04-01’ AND DATE_ADD(‘2017-04-04’,INTERVAL 1 DAY); 在查询的结果中没有发现有2017-04-04的记录,一番查找后发现mysql中对日期的查询对时分秒默认的是 00:00:00,所以显示出来的实际上只是‘2017-04-01 00:00:00’到‘2017-04-04 00:00:00‘,2017-04-04这天的记录是查不到的哦。 解决办法: 1,把and后的日期加一天。 SELECT * FROM timeline WHERE username = ‘Allen’ AND logTime BETWEEN ‘2017-04-01’ AND DATE_ADD(‘2017-04-04’,INTERVAL 1 DAY); 2,把and后的日期字符串拼接成’2017-04-04 23:59:59‘. 3,如果是使用oracle的话用TO_CHAR, TO_DATE函数
if (ValidateUtil.isNotEmpty (searchTO.getDateRange ())) {
if (ValidateUtil.isNotEmpty (fromDate) && ValidateUtil.isNotEmpty (endDate)) {
Date inputFromDt = DateUtil.convertStringToDate (DateUtil.DATE _PATTERN, fromDate)
Date inputToDt = DateUtil.convertStringToDate (DateUtil.DATE _PATTERN, endDate)
if (inputFromDt.compareTo (inputToDt) == 0 ) {
String inputFromDtStr = DateUtil.convertDateToString (DateUtil.SQL _DATE_PATTERN_YYYY_MM_DD, inputFromDt)
sql += " AND TO_CHAR(supt.EVENT_DT,'yyyy-MM-dd') = '" + inputFromDtStr + "'"
} else {
String inputFromDtStr = DateUtil.convertDateToString (DateUtil.SQL _DATE_PATTERN_YYYY_MM_DD, inputFromDt)
String inputToDtStr = DateUtil.convertDateToString (DateUtil.SQL _DATE_PATTERN_YYYY_MM_DD, inputToDt)
sql += " AND supt.EVENT_DT between TO_DATE('" + inputFromDtStr + "','yyyy-MM-dd') and TO_DATE('" + inputToDtStr + "','yyyy-MM-dd')"
}
}
}
MySQL 日期加减:
DATE_ADD(date,INTERVAL expr type) –加法 DATE_SUB(date,INTERVAL expr type) –减法