Ich habe eine Oracle-Datenbank mit einem timestamp
Feld darin. Was ist der richtige SQL-Code, um ein timestamp
in dieses Feld einzufügen ?
Ich habe eine Oracle-Datenbank mit einem timestamp
Feld darin. Was ist der richtige SQL-Code, um ein timestamp
in dieses Feld einzufügen ?
Antworten:
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, gehen Sie wie folgt vor:
insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);
TO_DATE
statt TO_TIMESTAMP
?
INSERT
Anweisung spielt es keine Rolle , aber im Allgemeinen möchten Sie solche Bindungsvariablen nicht verwenden. Die Typkonvertierung in Ihrer ersten Anweisung verhindert, dass sie bindungsempfindlich ist, was die Fähigkeit von Oracle einschränkt, gute Pläne zu erstellen. Das Optimierungsprogramm funktioniert möglicherweise besser, wenn Sie values (:ts_val)
stattdessen Folgendes verwenden: ts_val wird direkt einem Zeitstempel zugeordnet.
to_timestamp
einen schlechten Ausführungsplan für eine planbare SQL-Anweisung verursachen würde? Ich kann ein Beispiel zeigen, wie es nicht wäre. Ich denke, wir alle möchten stattdessen unerwarteten Datentypzwang vermeiden , der die Verwendung einer erwarteten Zeilenquellenoperation (dh der optimalen) ausschließt.
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 diese 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')
Ich hoffe, dass die Zeitformatkomponenten selbsterklärend sind, außer dass FF3
dies 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 ist. Sie können beispielsweise bestimmte Java-Objekte direkt einer TIMESTAMP
Spalte zuordnen, müssen jedoch die JDBC
Typzuordnungen verstehen .
Ich bevorzuge ANSI-Zeitstempel-Literale:
insert into the_table
(the_timestamp_column)
values
(timestamp '2017-10-12 21:22:23');
Weitere Details im Handbuch: https://docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062
timestamp '2019-05-16 10:05:51:19:277401'
Ich habe diesen Fehler: ORA-01882: Zeitzonenregion nicht gefunden
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 so einfach - anstatt einen Wert einzugeben, geben Sie diesen Code ein CURRENT_TIMESTAMP
.
Für meine eigene zukünftige Referenz:
Verwenden Sie mit cx_Oracle 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
Man kann es einfach benutzen
INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');
Auf diese Weise müssen Sie sich keine Gedanken über die Zeichenfolge im Datumsformat machen. Verwenden Sie einfach das Standard-Zeitstempelformat.
Funktioniert mit Oracle 11, habe keine Ahnung, ob dies für frühere Oracle-Versionen der Fall ist.