mysql使用between and处理时间区间不包括右边界问题

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')";
                }
            }
        }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

MySQL 日期加减:

DATE_ADD(date,INTERVAL expr type) –加法 
DATE_SUB(date,INTERVAL expr type) –减法

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值