Masz dwa problemy:TO_DATE
nie rozpoznaje żadnych składników strefy czasowej ani ułamków sekund, będziesz musiał przekonwertować go na znacznik czasu ze strefą czasową i .s
i tak nie reprezentujesz ułamków sekund, potrzebujesz .ff
. Prawidłowe modele formatu są pokazane w dokumentacji
.
Łącząc je, możesz zrobić:
SELECT TO_TIMESTAMP_TZ ('2015-08-26T05:46:30.488+0100',
'YYYY-MM-DD"T"hh24:mi:ss.ffTZHTZM')
FROM DUAL;
TO_TIMESTAMP_TZ('2015-08-26T05:46:30.488+0100','YYYY-MM-DD"T"HH24:MI:SS.FFTZHTZ
-------------------------------------------------------------------------------
26-AUG-15 05.46.30.488000000 +01:00
Jeśli naprawdę chcesz, aby była to data, musisz zdecydować, co zrobić z informacjami o strefie czasowej – albo załóż, że jest to czas lokalny (zasadniczo go zignoruj), albo przekonwertuj na UTC lub inną strefę czasową. Możesz jednak naprawdę chcieć zachować go jako znacznik czasu ze strefą czasową.