2011-03-24 16 views
57

Tengo un Oracle DB con un campo timestamp en él. ¿Cuál es el código SQL correcto para insertar un timestamp en este campo?¿Cómo insertar una marca de tiempo en Oracle?

+6

"No puedo encontrar esta información en cualquier lugar." La documentación de Oracle es completa y en línea. Encuéntrelo aquí: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/toc.htm – APC

Respuesta

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

si desea que la marca de tiempo actual que se inserta a continuación:

insert 
into tablename (timestamp_value) 
values (CURRENT_TIMESTAMP); 
+1

¿Por qué 'TO_DATE' en lugar de' TO_TIMESTAMP'? –

+0

@dAVE He actualizado la respuesta a TO_TIMESTAMP(). – reggie

+0

No importa esta simple instrucción 'INSERT', pero en general no quiere usar variables de vinculación como esta. La conversión de tipo en su primera declaración evita que sea vinculante, lo que limita la capacidad de Oracle para crear buenos planes. El optimizador puede funcionar mejor si utiliza 'values ​​(: ts_val)' en su lugar, suponiendo que: ts_val se asigna directamente a una marca de tiempo. –

20
INSERT 
INTO mytable (timestamp_field) 
VALUES (CURRENT_TIMESTAMP) 

CURRENT_TIMESTAMP y SYSTIMESTAMP son Oracle palabras reservadas para este fin. Son el análogo de marca de tiempo de SYSDATE.

7

tipo de depende de donde el valor que desea insertar está viniendo. Si desea insertar la hora actual, puede usar CURRENT_TIMESTAMP como se muestra en otras respuestas (o SYSTIMESTAMP).

Si usted tiene un tiempo como una cadena y quiere convertirlo en una marca de tiempo, utilizar una expresión como

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

El tiempo de componentes de formato son, espero, explica por sí mismo, excepto que FF3 significa 3 dígitos de precisión sub-segundo. Puede ir tan alto como 6 dígitos de precisión.

Si está insertando desde una aplicación, la mejor respuesta puede depender de cómo se almacena el valor de fecha/hora en su idioma. Por ejemplo, puede asignar ciertos objetos Java directamente a una columna TIMESTAMP, pero necesita comprender las asignaciones de tipos JDBC.

0

Antes que nada debe hacer el campo Nullable, luego de eso tan simple - en lugar de poner un valor ponga este código CURRENT_TIMESTAMP.

11
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF')); 
-4
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL, 
Somecolmn varchar (5), 
LastChanged [timestamp] NOT NULL) 

Esto funciona para mssql 2012

INSERT INTO Table1 VALUES('hello',DEFAULT) 
0

fecha de Inserción en SQL

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

Si Supongamos que queremos insertar fecha del sistema

insert 
into tablename (timestamp_value) 
values (sysdate); 
0

Por mi referencia futura:

Con el uso 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); 

No convertir en el PP sea necesario. Ver Oracle Documentation

Cuestiones relacionadas