ฉันมี Oracle DB ที่มีtimestamp
ฟิลด์อยู่ในนั้น รหัส SQL ที่ถูกต้องในการแทรกtimestamp
ลงในฟิลด์นี้คืออะไร?
ฉันมี Oracle DB ที่มีtimestamp
ฟิลด์อยู่ในนั้น รหัส SQL ที่ถูกต้องในการแทรกtimestamp
ลงในฟิลด์นี้คืออะไร?
คำตอบ:
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));
หากคุณต้องการให้แทรกการประทับเวลาปัจจุบัน:
insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);
TO_DATE
แทนที่จะเป็นTO_TIMESTAMP
?
INSERT
คำสั่งธรรมดานี้ แต่โดยทั่วไปคุณไม่ต้องการใช้ตัวแปรการผูกเช่นนี้ การแปลงประเภทในคำสั่งแรกของคุณป้องกันไม่ให้มีการผูกข้อมูลที่ละเอียดอ่อนซึ่งจำกัดความสามารถของ Oracle ในการสร้างแผนงานที่ดี เครื่องมือเพิ่มประสิทธิภาพอาจทำงานได้ดีขึ้นหากคุณใช้values (:ts_val)
แทนโดยสมมติว่า: ts_val จับคู่กับการประทับเวลาโดยตรง
to_timestamp
จะทำให้แผนการดำเนินการที่ไม่ดีสำหรับคำสั่ง SQL ที่สามารถวางแผนได้อย่างไร ฉันสามารถแสดงตัวอย่างของวิธีการที่จะไม่ แต่สิ่งที่ฉันคิดว่าเราทุกคนต้องการหลีกเลี่ยงคือการบีบบังคับชนิดข้อมูลที่ไม่คาดคิดซึ่งขัดขวางการใช้การดำเนินการของแหล่งข้อมูลแถวที่คาดไว้ (เช่นค่าที่เหมาะสมที่สุด)
INSERT
INTO mytable (timestamp_field)
VALUES (CURRENT_TIMESTAMP)
CURRENT_TIMESTAMP
และSYSTIMESTAMP
เป็นคำสงวนของ Oracle สำหรับวัตถุประสงค์นี้ SYSDATE
พวกเขาเป็นอนาล็อกของการประทับเวลา
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));
ชนิดขึ้นอยู่กับว่าค่าที่คุณต้องการแทรกนั้นมาจากไหน หากคุณต้องการแทรกเวลาปัจจุบันคุณสามารถใช้CURRENT_TIMESTAMP
ดังที่แสดงในคำตอบอื่น ๆ (หรือSYSTIMESTAMP
)
หากคุณมีเวลาเป็นสตริงและต้องการแปลงเป็นการประทับเวลาให้ใช้นิพจน์เช่น
to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')
องค์ประกอบรูปแบบเวลาคือฉันหวังว่าจะอธิบายได้เองยกเว้นว่าFF3
หมายถึง 3 หลักของความเที่ยงวินาทีย่อย คุณสามารถไปได้สูงถึง 6 หลักของความแม่นยำ
หากคุณกำลังแทรกจากแอปพลิเคชันคำตอบที่ดีที่สุดอาจขึ้นอยู่กับวิธีการจัดเก็บค่าวันที่ / เวลาในภาษาของคุณ ตัวอย่างเช่นคุณสามารถแมปวัตถุ Java บางรายการกับTIMESTAMP
คอลัมน์ได้โดยตรงแต่คุณต้องเข้าใจการJDBC
แม็ปประเภท
ฉันชอบตัวอักษรประทับเวลา ANSI:
insert into the_table
(the_timestamp_column)
values
(timestamp '2017-10-12 21:22:23');
รายละเอียดเพิ่มเติมในคู่มือ: https://docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062
timestamp '2019-05-16 10:05:51:19:277401'
ฉันมีข้อผิดพลาดนี้: ORA-01882: ไม่พบเขตเวลา
การใส่วันที่ใน sql
insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');
หากสมมติว่าเราต้องการแทรกวันที่ของระบบ
insert
into tablename (timestamp_value)
values (sysdate);
ก่อนอื่นคุณต้องทำให้ฟิลด์เป็น Nullable หลังจากนั้นก็ง่ายมาก - แทนที่จะใส่ค่าให้ใส่รหัสCURRENT_TIMESTAMP
นี้
สำหรับการอ้างอิงในอนาคตของฉันเอง:
ด้วย 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);
ไม่จำเป็นต้องมีการแปลงในฐานข้อมูล ดูเอกสาร Oracle
หนึ่งสามารถใช้
INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');
ด้วยวิธีนี้คุณจะไม่ต้องกังวลเกี่ยวกับสตริงรูปแบบวันที่เพียงแค่ใช้รูปแบบการประทับเวลาเริ่มต้น
ทำงานร่วมกับ Oracle 11 ไม่รู้ว่าจะทำกับ Oracle เวอร์ชันก่อนหน้าหรือไม่
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL,
Somecolmn varchar (5),
LastChanged [timestamp] NOT NULL)
ใช้งานได้กับ mssql 2012
INSERT INTO Table1 VALUES('hello',DEFAULT)