LambdaQueryWrapper 日期格式轉換,匹配精確日期及為空日期


  /**
     * 日期過濾
     */
    private void dateFilter(String dateField, LambdaQueryWrapper<TmpOrderAuxiliaryPlanEntity> wrapper, String fieldName) {
        List<String> dateArray;
        String sqlDateField = DataConversionUtil.humpToUnderline(fieldName);
        dateArray = Arrays.stream(dateField.split(Constant.SEP)).collect(Collectors.toList());
        StringBuilder sql = new StringBuilder();
        for (int i = 0; i < dateArray.size(); i++) {
            sql.append(Constant.SINGLE_QUOTE).append(dateArray.get(i)).append(Constant.SINGLE_QUOTE).append(Constant.SEP);
        }
        String stringSql = sql.deleteCharAt(sql.length() - 1).toString();
        //查詢日期滿足條件且為空的值
        //wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ") or " + sqlDateField + " is null");
        if (stringSql.contains(Constant.NULL)) {
            //wrapper.apply("" + sqlDateField + " is null");
            if (sqlDateField.equals(DataConversionUtil.humpToUnderline(Constant.PLANNED_DELIVERY_DATE))) {
                wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")").or().isNull(TmpOrderAuxiliaryPlanEntity::getPlannedDeliveryDate);
                //wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")");
            }
        } else {
            wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")");
        }
    }
 
queryWrapper匹配當前日期(不知道還有沒有更好的寫法):
            String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            String startDate = format + " 00:00:00";
            String endDate = format + " 23:59:59";
            queryWrapper.between(XXXEntity::getTime, startDate, endDate);
// 匹配當前日期 SQL寫法
SELECT * FROM `table_xxx` WHERE xxx_time BETWEEN date_sub(now(), INTERVAL 0 DAY) AND DATE_SUB(now(),INTERVAL -1 DAY)

 



注意事項 :
注意括號
錯誤寫法:  
wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ") or " + sqlDateField + " is null");
正確寫法:
wrapper.apply("DATE_FORMAT("( + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ") or " + sqlDateField + " is null)"); 
或:
wrapper.apply("DATE_FORMAT(" + sqlDateField + ",'%Y-%m-%d') in (" + stringSql + ")").or().isNull(TmpOrderAuxiliaryPlanEntity::getPlannedDeliveryDate); 

 說明:

wrapper.apply():sql自由拼接方法 可能會有sql注入風險  也可用於MySql  可用於.last()方法之前
LambdaQueryWrapper:可以直接從實體中獲取值,避免硬編碼
DATE_FORMAT() sql函數 用於日期格式轉換
Constant.SEP == “,”  (逗號)
Constant.SINGLE_QUOTE == “'” (單引號)、
DataConversionUtil.humpToUnderline() :駝峰轉下划線方法


免責聲明!

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



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