Ich habe eine Oracle-Datenbank mit einem timestamp
-Feld. Was ist der richtige SQL-Code, um eine timestamp
in dieses Feld einzufügen?
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));
wenn Sie möchten, dass der aktuelle Zeitstempel eingefügt wird, dann:
insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);
INSERT
INTO mytable (timestamp_field)
VALUES (CURRENT_TIMESTAMP)
CURRENT_TIMESTAMP
und SYSTIMESTAMP
sind für diesen Zweck von Oracle reservierte Wörter. Sie sind das Zeitstempelanalog von SYSDATE
.
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));
Die Art hängt davon ab, woher der Wert kommt, den Sie einfügen möchten. Wenn Sie die aktuelle Uhrzeit einfügen möchten, können Sie CURRENT_TIMESTAMP wie in anderen Antworten (oder SYSTIMESTAMP) gezeigt verwenden.
Wenn Sie eine Zeit als Zeichenfolge haben und diese in einen Zeitstempel konvertieren möchten, verwenden Sie einen Ausdruck wie
to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')
Die Zeitformatkomponenten sind, wie ich hoffe, selbsterklärend, mit der Ausnahme, dass FF3 3 Stellen mit einer Genauigkeit von weniger als einer Sekunde bedeutet. Sie können eine Genauigkeit von bis zu 6 Stellen erreichen.
Wenn Sie aus einer Anwendung einfügen, hängt die beste Antwort möglicherweise davon ab, wie der Datums-/Uhrzeitwert in Ihrer Sprache gespeichert wird. Sie können beispielsweise bestimmte Java-Objekte direkt einer TIMESTAMP-Spalte zuordnen, müssen jedoch die Zuordnungen von JDBC-Typen verstehen.
Ich bevorzuge ANSI-Zeitstempel-Literale:
insert into the_table
(the_timestamp_column)
values
(timestamp '2017-10-12 21:22:23');
Weitere Informationen im Handbuch: https://docs.Oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062
Datum in SQL einfügen
insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');
Angenommen, wir wollten das Systemdatum einfügen
insert
into tablename (timestamp_value)
values (sysdate);
Zuerst müssen Sie das Feld auf Null setzen, danach ist es so einfach - statt einen Wert einzugeben, setzen Sie diesen Code CURRENT_TIMESTAMP
.
Man kann einfach verwenden
INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');
Auf diese Weise brauchen Sie sich nicht um Datumsformat-Zeichenketten zu kümmern, verwenden Sie einfach das Standard-Zeitstempelformat.
Funktioniert mit Oracle 11, habe keine Ahnung, ob dies für frühere Oracle-Versionen der Fall ist.
Für meine eigene zukünftige Referenz:
Bei cx_Oracle verwenden Sie cursor.setinputsize (...):
mycursor = connection.cursor();
mycursor.setinputsize( mytimestamp=cx_Oracle.TIMESTAMP );
params = { 'mytimestamp': timestampVar };
cusrsor.execute("INSERT INTO mytable (timestamp_field9 VALUES(:mytimestamp)", params);
Keine Konvertierung in der Datenbank erforderlich. Siehe Oracle-Dokumentation