Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Napotkany błąd SQL:ORA-01843:niepoprawny miesiąc

'04/04/2012 13:35 PM' to nie data - to ciąg znaków.

Oracle wykona niejawne TO_DATE( string_value, format_mask ) na literałach niebędących datami podczas wstawiania ich do DATE kolumna przy użyciu wartości NLS_DATE_FORMAT parametr sesji jako maska ​​formatu (uwaga:jest to parametr sesji i należy do klienta; nie jest to ustawienie globalne ). Jeśli literał niedatowany pasuje do tego formatu, będzie działał (a jeśli nie, to nie będzie) - jednak, jeśli NLS_DATE_FORMAT jest kiedykolwiek zmieniany, to natychmiast się zepsuje (każdy może być ogromnym problemem podczas debugowania, ponieważ kod, który działał, nie ulegnie zmianie, ale nikt go nie zmieni).

Możesz sprawdzić swój aktualny NLS_DATE_FORMAT z zapytaniem:

SELECT VALUE
FROM   NLS_SESSION_PARAMETERS
WHERE  PARAMETER = 'NLS_DATE_FORMAT';

Lepiej jest jawnie użyć TO_DATE() z poprawną maską formatu lub użyć literału daty ANSI/ISO (np. DATE '2012-04-04' lub TIMESTAMP '2012-04-04 13:35' ).

Możesz zrobić:

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );

(nie potrzebujesz AM/PM ponieważ składnik godzinowy jest już ustawiony na zegar 24-godzinny)

lub

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );

(przy użyciu literału znacznika czasu ANSI/ISO, który Oracle niejawnie przekonwertuje na datę)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proszę o podanie kodu ceny tylko wtedy, gdy wpisz :=E

  2. PLS-00306:zła liczba lub typy argumentów w wywołaniu do „OUTPUT_ARRAY”

  3. Połącz się z Oracle SQL w Katalon Studio

  4. Nie można uruchomić IntelliJ IDEA CE 12 z Ubuntu Oracle Java 8

  5. Oracle FETCH FIRST 1 ROW z instrukcją UNION ALL