Bagaimana cara memasukkan cap waktu di Oracle?


Jawaban:


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

jika Anda ingin stempel waktu saat ini dimasukkan maka:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
Mengapa, TO_DATEbukan TO_TIMESTAMP?
Dave Costa

Tidak masalah untuk INSERTpernyataan sederhana ini , tetapi secara umum Anda tidak ingin menggunakan variabel bind seperti ini. Jenis konversi dalam pernyataan pertama Anda mencegahnya menjadi sensitif terhadap ikatan, yang membatasi kemampuan Oracle untuk membuat rencana yang baik. Pengoptimal dapat bekerja lebih baik jika Anda menggunakan values (:ts_val), dengan asumsi: ts_val memetakan langsung ke stempel waktu.
Jon Heller

@ JonHeller Dapatkah Anda menunjukkan contoh spesifik tentang bagaimana penggunaan to_timestampakan menyebabkan rencana eksekusi yang buruk untuk pernyataan SQL yang dapat direncanakan? Saya dapat menunjukkan contoh bagaimana tidak. Sebaliknya, apa yang saya pikir kita semua ingin hindari adalah pemaksaan tipe data yang tidak terduga yang menghalangi penggunaan operasi sumber baris yang diharapkan (yaitu, yang optimal).
Jeff Holt

@ jeff6times7 Lihat Inti ini untuk penjelasan tentang bagaimana variabel bind yang tidak dikonversi dapat mengungguli variabel bind yang dikonversi. Perbedaannya mungkin hanya penting jika datanya miring. Dengan jenis ikatan asli, Oracle dapat memahami data dengan lebih baik dan membuat perkiraan yang lebih baik berdasarkan nilai.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPdan SYSTIMESTAMPmerupakan kata-kata Oracle untuk tujuan ini. Mereka adalah analog cap waktu SYSDATE.


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

9

Jenisnya tergantung dari mana nilai yang ingin Anda masukkan berasal. Jika Anda ingin memasukkan waktu saat ini Anda dapat menggunakan CURRENT_TIMESTAMPseperti yang ditunjukkan pada jawaban lain (atau SYSTIMESTAMP).

Jika Anda memiliki waktu sebagai string dan ingin mengubahnya menjadi stempel waktu, gunakan ekspresi seperti

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

Komponen format waktu, saya harap, cukup jelas, kecuali itu FF3berarti presisi sub-detik 3 digit. Anda dapat mencapai presisi setinggi 6 digit.

Jika Anda memasukkan dari aplikasi, jawaban terbaik mungkin bergantung pada bagaimana nilai tanggal / waktu disimpan dalam bahasa Anda. Misalnya Anda bisa memetakan objek Java tertentu secara langsung ke TIMESTAMPkolom, tetapi Anda perlu memahami JDBCpemetaan tipe.



1

Memasukkan tanggal dalam sql

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

Jika misalkan kita ingin memasukkan tanggal sistem

insert
into tablename (timestamp_value)
values (sysdate);

0

Pertama-tama Anda perlu membuat field Nullable, lalu setelah itu sangat sederhana - alih-alih memberi nilai, masukkan kode ini CURRENT_TIMESTAMP.


0

Untuk referensi saya di masa mendatang:

Dengan cx_Oracle gunakan cursor.setinputsize (...):

mycursor = connection.cursor();

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

Tidak perlu mengubah db. Lihat Dokumentasi Oracle


0

Seseorang dapat dengan mudah menggunakan

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

Dengan cara ini Anda tidak perlu khawatir tentang string format tanggal, cukup gunakan format stempel waktu default.

Bekerja dengan Oracle 11, tidak tahu apakah itu berfungsi untuk versi Oracle sebelumnya.


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

ini berfungsi untuk mssql 2012

INSERT INTO Table1 VALUES('hello',DEFAULT)  
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.