Um Oracle
DATE não armazena tempos com mais precisão que um segundo. Você não pode armazenar dados de precisão de milissegundos em um DATE coluna. Suas duas opções são truncar a string dos milissegundos antes de convertê-la em um
DATE , ou seja to_date( substr('23.12.2011 13:01:001', 1, 19), 'DD.MM.YYYY HH24:MI:SS' )
ou para converter a string em um
TIMESTAMP que suporta precisão de milissegundos to_timestamp( '23.12.2011 13:01:001', 'DD.MM.YYYY HH24:MI:SSFF3' )