sql >> Databasteknik >  >> RDS >> Oracle

Inte en giltig månad på ett INSERT-utdrag

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.




  1. Få en kolumn från .sqlite som innehåller flera tabeller med flera kolumner

  2. Orakel. Hur skriver jag ut datum och tid?

  3. Hur använder man parametrar i en "where value in..."-sats?

  4. Hur man hämtar ett OBJECT_NAME() från en annan databas i SQL Server