我有一个Oracle数据库,其中有一个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
? - Dave CostaINSERT
语句来说并不重要,但通常情况下你不想像这样使用绑定变量。你第一个语句中的类型转换使它无法进行绑定敏感操作,这限制了Oracle创建良好计划的能力。如果你使用values (:ts_val)
,假设:ts_val
直接映射到时间戳,优化器可能会工作得更好。 - Jon Hellerto_timestamp
会导致可计划SQL语句的执行计划不佳?我可以展示一个它不会的例子。相反,我认为我们都想避免意外的数据类型强制转换,这将阻止使用预期的行源操作(即最优操作)。 - Jeff HoltINSERT
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:找不到时区区域。 - Alex 75One can simply use
INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');
适用于Oracle 11,不确定是否适用于早期版本的Oracle。
为了我的未来参考:
使用 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);
insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');
如果我们想要插入系统日期
insert
into tablename (timestamp_value)
values (sysdate);
首先,您需要使字段可为空,然后在此之后非常简单 - 不要放置值,而是放置此代码CURRENT_TIMESTAMP
。
INSERT INTO "DB"."TBL" (UPDATEDDATETIME)
VALUES (TO_TIMESTAMP('2022-07-12 17:16:05.551000000', 'YYYY-MM-DD HH24:MI:SS.FF'))