Como inserir um timestamp no Oracle?


Respostas:


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

se você deseja que o carimbo de hora atual seja inserido:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
Por que em TO_DATEvez de TO_TIMESTAMP?
Dave Costa

Não importa para esta INSERTinstrução simples , mas em geral você não deseja usar variáveis ​​de ligação como esta. A conversão de tipo em sua primeira instrução evita que ela seja sensível ao bind, o que limita a capacidade do Oracle de criar bons planos. O otimizador pode funcionar melhor se você usar em values (:ts_val)vez disso, assumindo: ts_val mapeia diretamente para um carimbo de data / hora.
Jon Heller

@JonHeller Você pode mostrar um exemplo específico de como o uso to_timestampcausaria um plano de execução incorreto para uma instrução SQL planejável? Posso mostrar um exemplo de como não seria. Em vez disso, o que acho que todos nós queremos evitar é a coerção inesperada do tipo de dados que impede o uso de uma operação de origem de linha esperada (ou seja, a ideal).
Jeff Holt

@ jeff6times7 Veja este Síntese para uma explicação de como variáveis ​​de vinculação não convertidas podem superar as variáveis ​​de vinculação convertidas. A diferença provavelmente só importa se os dados estiverem distorcidos. Com os tipos de ligação nativos, o Oracle pode entender melhor os dados e fazer melhores estimativas com base nos valores.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPe SYSTIMESTAMPsão palavras reservadas da Oracle para esse fim. Eles são o análogo do carimbo de data / hora 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

Depende de onde vem o valor que você deseja inserir. Se você deseja inserir a hora atual, você pode usar CURRENT_TIMESTAMPcomo mostrado em outras respostas (ou SYSTIMESTAMP).

Se você tem um tempo como uma string e deseja convertê-lo em um carimbo de data / hora, use uma expressão como

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

Os componentes do formato de hora são, espero, autoexplicativos, exceto que FF3 significa 3 dígitos de precisão sub-segundo. Você pode ir até 6 dígitos de precisão.

Se você estiver inserindo de um aplicativo, a melhor resposta pode depender de como o valor de data / hora está armazenado em seu idioma. Por exemplo, você pode mapear certos objetos Java diretamente para uma TIMESTAMPcoluna, mas você precisa entender os JDBCmapeamentos de tipo.



1

Inserindo data em sql

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

Suponha que desejamos inserir a data do sistema

insert
into tablename (timestamp_value)
values (sysdate);

0

Primeiramente você precisa tornar o campo Nullable, depois disso tão simples - ao invés de colocar um valor coloque este código CURRENT_TIMESTAMP.


0

Para minha própria referência futura:

Com cx_Oracle use cursor.setinputsize (...):

mycursor = connection.cursor();

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

Nenhuma conversão no banco de dados necessária. Veja a documentação da Oracle


0

Pode-se simplesmente usar

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

Desta forma, você não terá que se preocupar com a string de formato de data, apenas use o formato de carimbo de data / hora padrão.

Funciona com Oracle 11, não tenho ideia se funciona para versões anteriores do Oracle.


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

isso funciona para mssql 2012

INSERT INTO Table1 VALUES('hello',DEFAULT)  
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.