sql >> Databáze >  >> RDS >> Oracle

Neplatný měsíc na příkazu INSERT

Pokud v tabulce nemáte spouštěč, který nastavuje sloupec s datem nebo časovým razítkem, který by poskytoval určitou indikaci v úplném zásobníku chyb, zní to jako váš NLS_DATE_LANGUAGE neočekává anglickou zkratku měsíce.

To, co máte, platí v angličtině:

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 

Pokud je však výchozím jazykem data vaší relace polština (hádám z vašeho profilu), zobrazí se tato chyba – chybová zpráva je stále v angličtině:

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"

Pokud svou relaci nechcete nastavit na angličtinu, můžete to u konkrétního příkazu přepsat zadáním volitelného třetího parametru do 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 

Problému se také můžete zcela vyhnout použitím čísel měsíců místo názvů měsíců nebo použitím doslovné syntaxe časového razítka ANSI:

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       

Všechny tyto metody fungují také pro sloupce data; to_date() funkce je ovlivněna nastavením NLS stejným způsobem a má stejný volitelný parametr jazyka data.




  1. Aktualizujte řádek daty z jiného řádku ve stejné tabulce

  2. Jak se ujistit, že je vaše databáze MySQL zabezpečená

  3. Vraťte číslo oddílu pro každý řádek při dotazu na tabulku oddílů na serveru SQL (T-SQL)

  4. Mohu automaticky vytvořit tabulku v PostgreSQL ze souboru csv s hlavičkami?