Wie füge ich einen Zeitstempel in Oracle ein?


Antworten:


135
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);

1
Warum TO_DATEstatt TO_TIMESTAMP?
Dave Costa

Für diese einfache INSERTAnweisung 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.
Jon Heller

@ JonHeller Können Sie ein konkretes Beispiel dafür zeigen, wie die Verwendung to_timestampeinen 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.
Jeff Holt

@ jeff6times7 In dieser Übersicht finden Sie eine Erklärung, wie nicht konvertierte Bindevariablen konvertierte Bindevariablen übertreffen können. Der Unterschied ist wahrscheinlich nur wichtig, wenn die Daten verzerrt sind. Mit nativen Bindungstypen kann Oracle die Daten besser verstehen und basierend auf den Werten bessere Schätzungen vornehmen.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPund SYSTIMESTAMPsind Oracle reservierte Wörter für diesen Zweck. Sie sind das Zeitstempelanalog von SYSDATE.


19
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));

9

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_TIMESTAMPwie 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 TIMESTAMPSpalte zuordnen, müssen jedoch die JDBCTypzuordnungen verstehen .



1

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);

0

Zuerst müssen Sie das Feld auf Null setzen, danach so einfach - anstatt einen Wert einzugeben, geben Sie diesen Code ein CURRENT_TIMESTAMP.


0

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


0

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.


-6
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL,
Somecolmn varchar (5),
LastChanged [timestamp] NOT NULL)

Dies funktioniert für MSSQL 2012

INSERT INTO Table1 VALUES('hello',DEFAULT)  
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.