Oracle gem of the day: gracefully degrading date masks

jdavidb on 2006-06-19T13:18:33

I've got data that contains datetime values of differing resolutions: sometimes fields will contain fractional seconds; sometimes it will not. I've just learned that Oracle's TO_TIMESTAMP function gracefully degrades in the presence of a value of less precision than the date format string I specify. For example, given a table TSTAMP that contains a TIMESTAMP value (or DATE value) like this:

CREATE TABLE tstamp
(tstamp TIMESTAMP);

the following inserted values all work correctly:

INSERT INTO tstamp
VALUES
(TO_TIMESTAMP('2004-12-31T15:13:02.12345', 'YYYY-MM-DD"T"HH24:MI:SS.FF'));

INSERT INTO tstamp
VALUES
(TO_TIMESTAMP('2004-12-31T15:13:02', 'YYYY-MM-DD"T"HH24:MI:SS.FF'));

INSERT INTO tstamp
VALUES
(TO_TIMESTAMP('2004-12-31', 'YYYY-MM-DD"T"HH24:MI:SS.FF'));

This is handy because I don't want to bother including logic at the Perl level to think about what conversion function to include in my INSERT statement.