'04/04/2012 13:35 PM'
ist kein Datum - es ist ein String.
Oracle führt ein implizites TO_DATE( string_value, format_mask )
durch auf Nicht-Datumsliterale, wenn sie in ein DATE
eingefügt werden Spalte mit dem Wert von NLS_DATE_FORMAT
Sitzungsparameter als Formatmaske (Hinweis:Dies ist ein Sitzungsparameter und gehört dem Client; es ist keine globale Einstellung ). Wenn das Nicht-Datumsliteral mit diesem Format übereinstimmt, funktioniert es (und wenn nicht, dann nicht) - wenn jedoch NLS_DATE_FORMAT
jemals geändert wird, wird es sofort kaputt gehen (das Debuggen kann sehr mühsam sein, da der Code, der funktioniert hat, nicht funktioniert, aber niemand den Code geändert hat).
Sie können Ihr aktuelles NLS_DATE_FORMAT
herausfinden mit der Abfrage:
SELECT VALUE
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Es ist besser, explizit TO_DATE()
zu verwenden mit der richtigen Formatmaske oder um ein ANSI/ISO-Datumsliteral zu verwenden (d. h. DATE '2012-04-04'
oder TIMESTAMP '2012-04-04 13:35'
).
Sie können Folgendes tun:
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );
(Sie brauchen den AM/PM
nicht da die Stundenkomponente bereits auf einer 24-Stunden-Uhr steht)
oder
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );
(unter Verwendung des ANSI/ISO-Zeitstempelliterals, das Oracle implizit in ein Datum umwandelt)