I have a problem with Oracle 11g specific timestamp format.
This is what I have:
select to_timestamp('21-OCT-15 08.24.30.000000000 PM','DD-MON-RR HH.MI.SSXFF AM') from dual;
Response from database: ORA-01855: AM/A.M. or PM/P.M. required
01855. 00000 - "AM/A.M. or PM/P.M. required"
I have also tried to alter session settings with several commands and still nothing.
alter session set NLS_LANGUAGE='ENGLISH';
alter session set NLS_DATE_LANGUAGE='ENGLISH';
alter session set NLS_TIMESTAMP_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM';
alter session set NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH.MI.SSXFF AM';
I can't change timestamp format in SELECT statement, need to stay as it is. I guess the issue is in session settings.
Someone experienced in oracle database administration can suggest something, I will try. I know there are a couple of similar posts but I didn't find a solution. Thanks
Here are my session settings.
select * from nls_session_parameters;
Take a backup of your NLS settings and run these.
Then run the SQL statement again.
The core problem is that, on the session level, you have
nls_numeric_characters=',.'
while your timestamp string contains dot (.
) as the seconds-from-microseconds delimiter instead.The
to_timestamp()
function can accept a third parameter for overrides of the NLS settings. Here's a small demo for you ...Please notice the third parameter to the
to_timestamp()
function in the third SELECT. That's what you could do, too, apart from all the other correct answers.Try this:
SELECT TO_CHAR(TO_TIMESTAMP(**'2015-11-21-13:03:07.04776'**),'DD-MON-RR HH.MI.SSXFF AM') FROM DUAL;
The timestamp format between quotes should be the same as the result of this query:SELECT TO_CHAR(LOCALTIMESTAMP) FROM DUAL
Finally I have added Territory on the previous list altered session properties to make it work for me. Thanks