【mybatis】時間范圍 處理時間格式問題 + 查詢當天 本月 本年 + 按當天 當月 范圍 查詢 分組


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') &gt;= #{saleDateStart}
            </if>
            <if test="saleDateEnd != null">
                and DATE_FORMAT(info.sale_date,'%Y-%m-%d') &lt;= #{saleDateStart}
            </if>

問題就出在   #{時間字段} 這個地方,

雖然這個時候查詢的時候傳入的時間字段值 是  年月日格式  沒有時分秒  但是mybatis在生成sql的時候 ,依舊將 年月日進行格式化 成了 年月日 時分秒 類型。

 

解決方法:

<if test="saleDateStart != null">
                and DATE_FORMAT(info.sale_date,'%Y-%m-%d') &gt;= DATE_FORMAT(#{saleDateStart},'%Y-%m-%d')
            </if>
            <if test="saleDateEnd != null">
                and DATE_FORMAT(info.sale_date,'%Y-%m-%d') &lt;= 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 位


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM