How to convert “1985-02-07T00:00:00.000Z” (ISO8601) to a date value in Oracle?

后端 未结 5 1715
情书的邮戳
情书的邮戳 2020-12-09 08:13

I tried to convert a time-stamp (\"1985-02-07T00:00:00.000Z\") to a date and I failed to succeed in my several different attempts.

Below is the query I have tried:

相关标签:
5条回答
  • 2020-12-09 08:33
    SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date)
      2    from dual
      3  /
    
    CAST(TO_TIMESTAMP('
    -------------------
    07-02-1985 00:00:00
    
    1 row selected.
    
    0 讨论(0)
  • 2020-12-09 08:35

    to_date converts the input to a DATE type which does not support fractional seconds. To use fractional seconds you need to use a TIMESTAMP type which is created when using to_timestamp

    pst's comment about the ff3 modifier is also correct.

    "Constant" values in the format mask need to be enclosed in double quote

    So the final statement is:

    select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"')
    from dual;
    
    0 讨论(0)
  • 2020-12-09 08:38
    SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR')
    FROM dual;
    
    External table DDL,
    extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR'
    
    0 讨论(0)
  • 2020-12-09 08:38

    Some rules to follow:

    1. Literals must be double-quoted: MM expects a month number, "MM" expects a double-M.
    2. The format for fractional seconds is FF, not F or FFF. You specify the number of digits with a trailing integer, e.g. FF3.
    3. But dates cannot hold fractional seconds anyway so you cannot use FF3 in this context.

    This works:

    SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS')
    FROM dual;
    

    I don't know if there's a way to ignore fractional seconds in TO_DATE() so I've used string manipulation functions to strip them out:

    SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS')
    FROM dual;
    
    0 讨论(0)
  • 2020-12-09 08:42

    if u want to get the string in datetime format then try this....

    select to_char(TO_DATE('2012-06-26T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"'),'yyyy-MM-dd hh:mm:ss PM') as EVENT_DATE from dual
    
    EVENT_DATE
    -----------------------
    2012-06-26 12:06:00 AM
    

    only for date simply use...

    select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual
    
    0 讨论(0)
提交回复
热议问题