Såvida du inte har en utlösare i tabellen som ställer in en datum- eller tidsstämpelkolumn, vilket skulle ge en indikation i hela felstacken, låter det som din NLS_DATE_LANGUAGE
förväntar sig inte en engelskspråkig månadsförkortning.
Det du har är giltigt på engelska:
alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
alter session set nls_date_language ='ENGLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;
MY_DATE
---------------------------
14/04/15 13:36:58.803000000
Men om din sessions standarddatumspråk är polska (gissning från din profil) kommer det att ge detta felmeddelande - med felmeddelandet fortfarande på engelska:
alter session set nls_date_language ='POLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;
SQL Error: ORA-01843: not a valid month
01843. 00000 - "not a valid month"
Om du inte vill ställa in din session på engelska kan du åsidosätta det för ett specifikt uttalande genom att ge den valfria tredje parametern till to_timestamp()
:
alter session set nls_date_language ='POLISH';
select to_timestamp('15-APR-14 01.36.58.803000000 PM',
'DD-MON-RR HH.MI.SS.FF AM',
'NLS_DATE_LANGUAGE=ENGLISH') as my_date
from dual;
MY_DATE
---------------------------
14/04/15 13:36:58.803000000
Du kan också undvika problemet helt och hållet genom att använda månadsnummer istället för månadsnamn, eller använda ANSI-tidsstämpelns bokstavliga syntax:
select timestamp '2014-04-15 13:36:58.803' from dual;
TIMESTAMP'2014-04-1513:36:58.803'
---------------------------------
14/04/15 13:36:58.803000000
Dessa metoder fungerar också alla för datumkolumner; to_date()
funktionen påverkas av NLS-inställningar på samma sätt och har samma valfria datumspråkparameter.