ORA-01810: format code appears twice
该异常一般出现在使用to_date函数时。我们在制定to_date转换格式时,如果将格式写成'yyyy-mm-dd hh:MM:ss'就会抛此异常。因为在oracle中日期格式是不区分大小写的,因此系统会认为'mm' 与 'MM'等同,即出现了两次。
正确的写法是:
to_date('2006-06-01 18:00:00' 'yyyy-mm-dd hh:mi:ss')
to_date('2006-06-01 18:00:00' 'yyyy-mm-dd hh12:mi:ss')
to_date('2006-06-01 18:00:00' 'yyyy-mm-dd hh24:mi:ss')
其中,hh和hh12效果等同。
除了在to_date函数中使用'yyyy-mm-dd hh:MM:ss' 转换会出问题,在to_char中也会,只不过系统不会因此抛出异常。分析如下代码:
假设当前系统时间是 3/5/2010 6:00:57 pm,使用to_char转换格式
to_char(sysdate, 'yyyy-mm-dd hh:MM:ss' )
期待转换结果:2010-03-05 06:00:57
实际转换结果:2010-03-05 06:03:57
产生此错误就是因为系统认为mm和MM等同,并将月份位(mm)的值添加到了分钟位。