ORA-01861: 文字与格式字符串不匹配和日期与字符串互转问题解决

今天用mybatis写update的语句时,出现了:ORA-01861: 文字与格式字符串不匹配 与Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already的错误,我的数据库是Oracle。看了一下SQL语句和数据库的字段类型,发现我有个字段是时间类型。所以我们需要这样

  1. String ceratedate="2007-12-28";
  2. SQl语句必须指定日期格式
  3. public int update(String ceratedate);
  4. <update id="update" parameterType="String">
  5. update table set ceratedate=to_date(#{ceratedate'yyyy-mm-dd'});
  6. update>

后来我更新运行了一下,出现了:Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already的错误。出现这种错误时,我以为我的配置问题,我改名了

  1. public int updates(String ceratedate);
  2. <update id="updates" parameterType="String">
  3. update table set createdate=to_date(#{ceratedate'yyyy-mm-dd'});
  4. update>

现在运行后还是出现了updates已经存在的问题,我重新检查了语句,原来发现我SQL语句写错了。

正确的 正确的 正确的要这样的:

  1. public int update(String ceratedate);
  2. <update id="update" parameterType="String">
  3. update table set ceratedate=to_date(#{ceratedate},'yyyy-mm-dd');
  4. update>

运行 OK 没有问题

那我们查询时,如何将时间格式转换成字符串呢?要用到to_char()函数

Date格式转换成String格式

  1. select to_char(a.createdate,'yyyy-mm-dd') from table a