Come inserire un timestamp in Oracle?


Risposte:


135
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));

se si desidera inserire il timestamp corrente, allora:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
Perché TO_DATEinvece di TO_TIMESTAMP?
Dave Costa

Non importa per questa semplice INSERTistruzione, ma in generale non vuoi usare variabili di bind come questa. La conversione del tipo nella prima istruzione impedisce che sia sensibile al bind, il che limita la capacità di Oracle di creare buoni piani. L'ottimizzatore potrebbe funzionare meglio se si utilizza values (:ts_val)invece, supponendo che: ts_val venga mappato direttamente a un timestamp.
Jon Heller

@ JonHeller Puoi mostrare un esempio specifico di come l'utilizzo to_timestampcauserebbe un piano di esecuzione errato per un'istruzione SQL pianificabile? Posso mostrare un esempio di come non lo sarebbe. Invece, quello che penso che tutti noi vogliamo evitare è la coercizione inaspettata del tipo di dati che preclude l'utilizzo di un'operazione di origine riga prevista (cioè quella ottimale).
Jeff Holt

@ jeff6times7 Vedi questo Gist per una spiegazione di come le variabili di bind non convertite possono sovraperformare le variabili di bind convertite. La differenza probabilmente è importante solo se i dati sono distorti. Con i tipi di bind nativi, Oracle può comprendere meglio i dati ed effettuare stime migliori in base ai valori.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPe SYSTIMESTAMPsono parole riservate Oracle per questo scopo. Sono l'analogo del timestamp di 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

Il tipo dipende da dove proviene il valore che si desidera inserire. Se vuoi inserire l'ora corrente puoi usare CURRENT_TIMESTAMPcome mostrato in altre risposte (o SYSTIMESTAMP).

Se hai un tempo come stringa e desideri convertirlo in un timestamp, usa un'espressione come

to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')

I componenti del formato dell'ora sono, spero, autoesplicativi, tranne per questo FF3 significa 3 cifre di precisione inferiore al secondo. Puoi arrivare fino a 6 cifre di precisione.

Se stai inserendo da un'applicazione, la risposta migliore potrebbe dipendere da come il valore di data / ora è memorizzato nella tua lingua. Ad esempio, è possibile mappare determinati oggetti Java direttamente su una TIMESTAMPcolonna, ma è necessario comprendere le JDBCmappature dei tipi.



1

Inserimento della data in sql

insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');

Supponiamo di voler inserire la data di sistema

insert
into tablename (timestamp_value)
values (sysdate);

0

Prima di tutto devi rendere il campo Nullable, poi così semplice - invece di mettere un valore metti questo codice CURRENT_TIMESTAMP.


0

Per mio riferimento futuro:

Con cx_Oracle usa cursor.setinputsize (...):

mycursor = connection.cursor();

mycursor.setinputsize( mytimestamp=cx_Oracle.TIMESTAMP );
params = { 'mytimestamp': timestampVar };
cusrsor.execute("INSERT INTO mytable (timestamp_field9 VALUES(:mytimestamp)", params);

Nessuna conversione nel db necessaria. Vedere la documentazione Oracle


0

Si può semplicemente usare

INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');

In questo modo non dovrai preoccuparti della stringa del formato della data, utilizza semplicemente il formato di timestamp predefinito.

Funziona con Oracle 11, non ho idea se funziona per le versioni precedenti di Oracle.


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

questo funziona per mssql 2012

INSERT INTO Table1 VALUES('hello',DEFAULT)  
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.