mysql時間區間問題
阿新 • • 發佈:2018-11-28
一、between……and……
SELECT * FROM 表名 WHERE 開始時間欄位名 BETWEEN '2018-09-01' AND '2018-09-14';
發現9月14號的資料沒有出來,那就證明between……and……是左閉右開,即[a,b),包含a的值,不包含b的值。
將上面程式碼修改下面的語句即可,將原來的日期加上一天,就行。
select * from 表名 where 欄位名 BETWEEN '2018-08-08' and DATE_ADD('2018-09-14',INTERVAL 1 DAY);
這個問題其實代入到數學中很簡單。 我測試的時候和同事說沒有包含這一天的資料,還爭論了半天,其實是因為思維的問題,程式設計師的思維和正常人的思維是有一定差異的。就像我有時候就會從0開始數東西,到最後發現不對。當然生活中還是要正常,工作中不正常的需求太多了。
二、<和>問題
我的專案用的mybatis,下面就是擷取mapper的一部分,其實和上面的between一樣的用法
<if test="開始時間欄位名 != null and 開始時間欄位名 != ''">
AND 開始時間欄位名 >= #{前臺傳的值}
</if>
<if test="結束時間欄位名!= null and 結束時間欄位名!= ''">
AND 結束時間欄位名 <= DATE_ADD(#{前臺傳的值},INTERVAL 1 DAY)
</if>
三、在java程式碼中拼接
在程式碼中拼接,用上面的<和>查詢,簡單粗暴,只是記錄一下實現方法
if(StringUtils.isNotEmpty(beginDate)){
params.put("beginDate",beginDate+" 00:00:00");
}
if(StringUtils.isNotEmpty(endDate)){
params.put("endDate",endDate + " 23:59:59");
}