比如to_timestamp('2000 JUN', 'YYYY MON')是正确的,但是to_timestamp('2000 JUN', 'FXYYYY MON')会返回一个错误,因为to_timestamp只预料会有一个空白。FX必须做为模板里的第一个项声明。
to_timestamp和to_date用来处理不能通过简单转换被转换的输入格式。 这些函数用最小的错误检查解释输入。当它们产生有效的输出时, 转换可以产生预想不到的结果。例如,这些函数的输入不受正常范围的约束, 因此to_date('20096040','YYYYMMDD')返回2014-01-17而不是引起一个错误。 类型转换没有这样的行为。
在to_char模板里可以有普通文本,并且它们会被逐字输出。 你可以把一个字符串放到双引号里强迫它解释成一个文本,即使它里面包含模式关键字也如此。 比如'"Hello Year "YYYY'中的YYYY将被年份数据代替, 但是Year里单独的Y会。在to_date,to_number和to_timestamp里,加双引号的字符串忽略包含在字符串中的输入字符的数量, 例如,"XX"忽略两个输入字符。
如果你想在输出里有双引号,那么你必须在它们前面放反斜杠,比如'\"YYYY Month\"'。
如果年份的格式规范少于四个字节,例如YYY,并且提供的年份少于四个字节, 那么年份将调整为接近于2020,例如95成为1995。
如果你使用的年份长于4位字符,那么用YYYY从字符串向timestamp或date做转换时要受到限制。你必须在YYYY后面使用一些非数字字符或者模板,否则年份总是解释为 4 位数字。比如对于 20000 年:to_date('200001131', 'YYYYMMDD')将会被解释成一个 4 位数字的年份, 最好在年后面使用一个非数字的分隔符,像to_date('20000-1131', 'YYYY-MMDD')或to_date('20000Nov31', 'YYYYMonDD')。
在从字符串向timestamp或date转换的时候,如果有YYY,YYYY或Y,YYY字段,那么CC字段会被忽略。 如果CC与YY或Y一起使用, 那么年份用指定的世纪计算。如果指定了世纪而没有指定年,那么假设使用这个世纪的第一年。