欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis 时间区间比较

程序员文章站 2022-07-13 16:06:52
...

mybatis 时间区间比较

 

jdbcType=TIMESTAMP  ,jdbcType=DATE决定了时间的格式
有些函数不同版本的mysql不具备
注意 传入的是date类型  <if test="empId != null and empId != ''" >
AND o.EMP_ID = ${empId}
</if>
不能有类似and empId != ''这样和字符串的比较,除非你传入的是专为string后的类型
### Error querying database.  Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String] with root cause

java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
at org.apache.ibatis.ognl.OgnlOps.compareWithConversion(OgnlOps.java:93)
at org.apache.ibatis.ognl.OgnlOps.isEqual(OgnlOps.java:143)
at org.apache.ibatis.ognl.OgnlOps.equal(OgnlOps.java:802)
at org.apache.ibatis.ognl.ASTNotEq.getValueBody(ASTNotEq.java:53)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at org.apache.ibatis.ognl.SimpleNode.getValue(SimpleNode.java:258)
at org.apache.ibatis.ognl.ASTAnd.getValueBody(ASTAnd.java:61)
at org.apache.ibatis.ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
。。。。
<![CDATA[   ]]>只是转义<  > 这种特殊符号
数据库日期是字符串类型可以和程序中传来的字符串日期直接比价,数据库是日期类型需要把传来的
字符类型日期转化成日期类型再比较

直接上代码,此时数据库使用的Date类型:(即:数据库类型date,传入是string)

mybatis 时间区间比较
            
    
    博客分类: mybatis mybatis 
    <if test="minCreateTime != null and  minCreateTime != ''">
            <![CDATA[ and g.create_time >= to_date(#{minCreateTime,jdbcType=DATE},'yyyy-MM-dd hh24:mi:ss')]]>
        </if>
        <if test="maxCreateTime != null and  maxCreateTime != ''">
            <![CDATA[ and g.create_time <= to_date(#{maxCreateTime,jdbcType=DATE},'yyyy-MM-dd hh24:mi:ss')]]>
        </if>
mybatis 时间区间比较
            
    
    博客分类: mybatis mybatis 

若数据库是字符串类型,也可以直接比较,如下:(传入的是date,数据库任意类型)

mybatis 时间区间比较
            
    
    博客分类: mybatis mybatis 
       <if test="createTime != null">
                AND CREATE_TIME = CONCAT(CONCAT('%', #{createTime,jdbcType=DATE}), '%')
            </if>
            <if test="updateTime != null">
                AND UPDATE_TIME = CONCAT(CONCAT('%', #{updateTime,jdbcType=DATE}), '%')
            </if>
mybatis 时间区间比较
            
    
    博客分类: mybatis mybatis 

 

 

<if test="minCreateTime != null and  minCreateTime != ''">
            <![CDATA[ and g.create_time >= to_date(#{minCreateTime,jdbcType=DATE},'yyyy-MM-dd hh24:mi:ss')]]>
        </if>
        <if test="maxCreateTime != null and  maxCreateTime != ''">
            <![CDATA[ and g.create_time <= to_date(#{maxCreateTime,jdbcType=DATE},'yyyy-MM-dd hh24:mi:ss')]]>
        </if>

业务驱动技术,技术是手段,业务是目的。
 
 
 
 
<if test="(prassignTime != null )" >
  <![CDATA[ and o.ASSIGN_TIME  >= #{prassignTime,jdbcType=TIMESTAMP} ]]>
</if>
<if test="(lsassignTime != null)" >
  <![CDATA[ and o.ASSIGN_TIME <= #{lsassignTime,jdbcType=TIMESTAMP} ]]>
</if>
<if test="(prfirstdailTime != null ) " >
  <![CDATA[ and o.FIRSTDAIL_TIME  >= #{prfirstdailTime,jdbcType=TIMESTAMP} ]]>
</if>
<if test=" (lsfirstdailTime != null)" >
  <![CDATA[ and o.FIRSTDAIL_TIME  <= #{lsfirstdailTime,jdbcType=TIMESTAMP} ]]>
</if>
<if test="status != null and status != ''" >
  AND o.STATUS = ${status}
</if>

或者:
<if test="prassignTime != null  and prassignTime != ''" >
  and o.ASSIGN_TIME  &gt;= #{prassignTime,jdbcType=VARCHAR}
</if>
<if test="lsassignTime != null and lsassignTime != ''" >
  and o.ASSIGN_TIME &lt;= #{lsassignTime,jdbcType=VARCHAR}
</if>
 
可以转化数据库字段,条件字段:

to_char   
to_date

转化数据库字段:
SELECT C.* FROM TB_CUS_FIRM_CHG C WHERE 1 = 1 AND to_char(C.CHK_TIME, 'yyyy-mm-dd') >= ? AND 
to_char(C.CHK_TIME, 'yyyy-mm-dd') <= ? order by C.CUSTOMER_KEY asc

转化条件字段:
  <if test="maxCreateTime != null and  maxCreateTime != ''">
            <![CDATA[ and g.create_time <= 
to_date(#{maxCreateTime,jdbcType=DATE},'yyyy-MM-dd hh24:mi:ss')]]>
        </if>
相关标签: mybatis