1.mybatis中查詢時間范圍處理:
例如2018-05-22 ~2018-05-23
則查出來的數據僅能查到2018-05-22的,查不到2018-05-23的數據!
為什么會這樣?
明明時間字段在spring MVC中已經處理了,已經沒有2018-05-23 00:00:00.0,已經獲取到了日期,去掉了時分秒,為什么傳入mybatis進行sql查詢的時候依舊會變成這樣?
<if test="saleDateStart != null"> and DATE_FORMAT(info.sale_date,'%Y-%m-%d') >= #{saleDateStart} </if> <if test="saleDateEnd != null"> and DATE_FORMAT(info.sale_date,'%Y-%m-%d') <= #{saleDateStart} </if>
問題就出在 #{時間字段} 這個地方,
雖然這個時候查詢的時候傳入的時間字段值 是 年月日格式 沒有時分秒 但是mybatis在生成sql的時候 ,依舊將 年月日進行格式化 成了 年月日 時分秒 類型。
解決方法:
<if test="saleDateStart != null"> and DATE_FORMAT(info.sale_date,'%Y-%m-%d') >= DATE_FORMAT(#{saleDateStart},'%Y-%m-%d') </if> <if test="saleDateEnd != null"> and DATE_FORMAT(info.sale_date,'%Y-%m-%d') <= DATE_FORMAT(#{saleDateStart},'%Y-%m-%d') </if>
這樣就能保證 mybatis在處理sql的時候,按照年月日的格式去處理參數!!!
2.查詢 本秒 本分鍾 本小時 本天 本月 本年
本秒查詢
SELECT id, date_0 FROM worksheet_data_30 WHERE DATE_FORMAT( date_0, '%Y-%m-%d %H:%i:%S' ) = DATE_FORMAT( '2019-06-05 09:35:06', '%Y-%m-%d %H:%i:%S' )
本分查詢
SELECT id, date_0 FROM worksheet_data_30 WHERE DATE_FORMAT( date_0, '%Y-%m-%d %H:%i' ) = DATE_FORMAT( '2019-06-05 09:35:06', '%Y-%m-%d %H:%i' )
本時查詢
SELECT id, date_0 FROM worksheet_data_30 WHERE DATE_FORMAT( date_0, '%Y-%m-%d %H' ) = DATE_FORMAT( '2019-06-05 09:35:06', '%Y-%m-%d %H' )
當天數據
select * from security_code_config where DATE_FORMAT(create_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
本月數據
select * from security_code_config where DATE_FORMAT(create_date,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')
本年數據
select * from security_code_config where DATE_FORMAT(create_date,'%Y') = DATE_FORMAT(NOW(),'%Y')
3.查詢時間分組
查詢最近7天 按天分組統計數據
SELECT create_date, IFNULL(sum(security_code_total), 0) createSCNum, IFNULL(sum(print_num), 0) printNum FROM security_code_config WHERE tid = 'ten_pisen' AND DATE_FORMAT(create_date,'%Y-%m-%d') <= DATE_FORMAT('2019-03-12','%Y-%m-%d') AND DATE_FORMAT(create_date,'%Y-%m-%d') >= DATE_FORMAT('2019-03-01','%Y-%m-%d') GROUP BY DATE_FORMAT(create_date,'%Y-%m-%d')
查詢最近6個月 按月分組統計數據
SELECT create_date, IFNULL(sum(security_code_total), 0) createSCNum, IFNULL(sum(print_num), 0) printNum FROM security_code_config WHERE tid = 'ten_pisen' AND DATE_FORMAT(create_date,'%Y-%m-%d') <= DATE_FORMAT('2019-03-12','%Y-%m-%d') AND DATE_FORMAT(create_date,'%Y-%m-%d') >= DATE_FORMAT('2018-10-01','%Y-%m-%d') GROUP BY DATE_FORMAT(create_date,'%Y-%m')
===============================附錄,mysql格式化時間符號========================
format參數的格式有
%a | 縮寫星期名 |
%b | 縮寫月名 |
%c | 月,數值 |
%D | 帶有英文前綴的月中的天 |
%d | 月的天,數值(00-31) |
%e | 月的天,數值(0-31) |
%f | 微秒 |
%H | 小時 (00-23) |
%h | 小時 (01-12) |
%I | 小時 (01-12) |
%i | 分鍾,數值(00-59) |
%j | 年的天 (001-366) |
%k | 小時 (0-23) |
%l | 小時 (1-12) |
%M | 月名 |
%m | 月,數值(00-12) |
%p | AM 或 PM |
%r | 時間,12-小時(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 時間, 24-小時 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,與 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,與 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,與 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,與 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |