I'm using a
TO_CHAR(TO_DATE(tdj_tran_dt,'DD-MON-RRRR'),'DD-MON-RRRR')
in my one of my views.
The underlying Data is in the form DD-MON-YY
and I have to display it in the form DD-MON-YYYY
in the screen.
Initially I was using to_char(tdj_Tran_dt,'DD-MON-YYYY')
alone but it wasnt working out. For example, 20-OCT-17 would become 20-OCT-0017. My system has migrated data so changing the form of the data while inserting into table will not help. So for this I've used TO_CHAR(TO_DATE(tdj_tran_dt,'DD-MON-RRRR'),'DD-MON-RRRR')
which seems to be working everywhere except in unix.
I have a proc file (run through linux) which calls this view and writes the data in xls format. but in the proc while opening the cursor it gives Oracle error ORA-01843. Changing it back to to_char(tdj_Tran_dt,'DD-MON-YYYY')
seems to work but brings back the original problem.
I just want to know is there some setting in the database that I can change to fix this issue. I have the samething running in two different environments and the not a valid month error seems to be only occuring in one environment. I have checked nls_parameters which seems to be the same in both environments.
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET AL32UTF8
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
I've checked in a lot of places but no solution. If anybody has any idea how this could be solved, please help.
I'm going to make a wild guess that
tdj_tran_dt
is actually aDATE
column, since you mentioned that you were usingto_char(tdj_tran_dt,'DD-MON-YYYY')
, which would have failed if it was a string. (It could also explain whyto_date(tdj_tran_dt,'DD-MON-RRRR')
failed in another environment, if thenls_date_format
there was not compatible with'DD-MON-RRRR'
.) Therefore the issue is that some of the dates were incorrectly entered as year 0017 etc, i.e. 1st century AD.If this is the case, then you probably want to clean up dates that are wildly out by discarding the century and substituting a nearer one, while retaining dates that are closer to today.