A question on StackOverflow asks how to do this using Oracle’s TO_TIMESTAMP function, and there is a solution[1]. So, I tried
SELECT to_timestamp ('2017-08-10T09:12:26.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') FROM DUAL on http://rextester.com/l/oracle_online_compiler <http://rextester.com/l/oracle_online_compiler> and it worked. I presume Drill’s TO_TIMESTAMP is based is based on Oracle’s. In which case let’s fix TO_TIMESTAMP. Julian [1] https://stackoverflow.com/questions/26671557/convert-string-iso-8601-date-to-oracles-timestamp-datatype <https://stackoverflow.com/questions/26671557/convert-string-iso-8601-date-to-oracles-timestamp-datatype> > On Oct 18, 2017, at 7:57 AM, Bob Rudis <b...@rud.is> wrote: > > FWIW I was doing very similar substring (etc) machinations until we > started converting output from back-end data-generation tools directly > into parquet (using other tools). IMO it's a common enough format (at > least in the types of data you and I likely have to work with :-) that > it'd be great if there was direct support for it. If there is, I also > missed it and would also be most appreciative of which incantations to > use to take advantage of it. > > On Wed, Oct 18, 2017 at 10:49 AM, Charles Givre <cgi...@gmail.com> wrote: >> Hello Drillers, >> I have a silly question which I’m a little stuck with. I have some data in >> CSV format with dates in the following format: 2017-08-10T09:12:26.000Z. >> I’m trying to convert this into a date time data field so that I have both >> the date and the hours, however I keep running into road blocks. I’ve >> tried the CAST( field AS DATE ) but in doing so I lose the time component. >> I’ve tried the TO_TIMESTAMP function, however the only success I’ve had is >> using the substring function to remove the timezone at the end, then use >> regex_replace to get rid of the literal ’T’ in the middle of the string, >> then TO_NUMBER. (See query below) >> >> SELECT TO_TIMESTAMP( REGEXP_REPLACE( SUBSTR( <field>, 1,19), 'T', ' '), >> 'yyyy-MM-dd HH:mm:ss' ) AS dt, >> EXTRACT( >> hour FROM >> TO_TIMESTAMP( REGEXP_REPLACE( SUBSTR( <field>, 1,19), 'T', ' '), 'yyyy-MM-dd >> HH:mm:ss' ) >> ) AS dt_hour >> >> I’d think you could do this directly with the TO_TIMESTAMP function however, >> I can’t figure out how include the literal ’T’ in the formatting string. >> The escape character seems to be the single quote which also is the only >> character allowed to denote the formatting string. >> >> So, questions: >> 1. Is there any way to include a literal character in a joda date format? >> 2. Is it possible to use any character besides a single quote to mark the >> beginning/end of a format string? >> 3. Are there any ways to do this that I’m missing? >> >> Thanks! >> —C >>