【原】Oracle中产生 “0000-00-00”格式的日期

  Oracle中产生 “0000-00-00”格式的日期
 
  某需求上线后系统中出现很多日期为'0000-00-00'的数据,此种数据为错误数据并不是预期结果,并且不确定是如何产生的。
  尝试使用select to_date('0000-00-00','yyyy-mm-dd') from dual; 查询报错,根本无法得到这个日期的数据。
  尝试Insert同样不能成功。
 
  排查发现该日期通过JAVA处理后存入数据库,怀疑转换有问题。后测试发现,当页面将日期录入为'9999-99-99',JAVA可以将其转换,
  结果为“Thu Jun 07 00:00:00 CST 10007”。我们看到,实际年份变为了10007,JAVA将99个月视为合法并进位,此时存入数据库结果显示为“0000-00-00”。
  但此时实际数据库记录的应该为10007,只是无法显示通过一下语句验证,“0000-00-00”是大于“9999-09-09”: 
 
  SQL> select dump(c.end_date),c.end_date,dump(tc.insert_time),c.insert_time
  2   from customer c where c.end_date > to_date('9999-09-09','yyyy-mm-dd') and c.customer_id =4100026927;
 
  DUMP(C.END_DATE)                       END_DATE       DUMP(C.INSERT_TIME)                     INSERT_TIME
  -------------------------------------- -------------- ---------------------------------------- -----------
  Typ=12 Len=7: 199,199,11,29,1,1,1      9999-11-29     Typ=12 Len=7: 120,109,12,28,18,54,2      2009-12-28
 
附JAVA代码:
  public static java.util.Date toDate(int year, int month, int date) {
    return toDate(year, month, date, 0, 0, 0);
  }

  public static java.util.Date toDate(int year, int month, int date, int hrs,
      int min, int sec) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month - 1, date, hrs, min, sec);
    return calendar.getTime();
  }

你可能感兴趣的:(java,oracle,Date,数据库,calendar,insert)