这个问题比较隐蔽,to_char这个类型函数可以处理字符,时间、数字格式类型的数据,但处理转义成对应的格式必须符合该类型的规则,1.select to_char(2011-6-21) from dual处理时候,先处理2011-6-21数据库把认为是一个数字,优先处理加减乘除,相减的结果就是1984在转义成字符也就是1984了;2.对于select to_char(2011-6-21,'yyyymmdd') from dual这个类型的报错,是应为从number转义到字符没有'yyyymmdd'这中转义格式,详细的转义格式请参考sql reference...