如何在Oracle中插入时间戳?

109

我有一个Oracle数据库,其中有一个timestamp字段。如何编写正确的SQL代码将timestamp插入到该字段中?


9
我无法在任何地方找到这些信息。Oracle文档全面且在线。在此处查找:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/toc.htm - APC
11个回答

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

如果你想插入当前时间戳,则:

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

2
为什么要使用 TO_DATE 而不是 TO_TIMESTAMP - Dave Costa
对于这个简单的INSERT语句来说并不重要,但通常情况下你不想像这样使用绑定变量。你第一个语句中的类型转换使它无法进行绑定敏感操作,这限制了Oracle创建良好计划的能力。如果你使用values (:ts_val),假设:ts_val直接映射到时间戳,优化器可能会工作得更好。 - Jon Heller
@JonHeller,您能否展示一个具体的例子,说明如何使用to_timestamp会导致可计划SQL语句的执行计划不佳?我可以展示一个它不会的例子。相反,我认为我们都想避免意外的数据类型强制转换,这将阻止使用预期的行源操作(即最优操作)。 - Jeff Holt
@jeff6times7 请查看此Gist,了解未转换的绑定变量如何优于转换后的绑定变量。这种差异可能只在数据倾斜时才有影响。使用本地绑定类型,Oracle可以更好地理解数据,并根据值做出更好的估计。 - Jon Heller

35
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPSYSTIMESTAMP是Oracle保留字,用于表示当前时间戳,它们是SYSDATE的时间戳版本。


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

10

这有点取决于你想插入的值来自哪里。如果你想插入当前时间,你可以像其他答案中所示使用CURRENT_TIMESTAMP(或者SYSTIMESTAMP)。

如果你有一个时间字符串并且想将其转换为时间戳,请使用以下表达式:

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

时间格式的组成部分应该是不难理解的,除了FF3表示精确到毫秒以下的3个数字,你可以高达6位数字的精度。

如果你在应用程序中插入时间值,最好的答案可能取决于日期/时间值在你的语言中的存储方式。例如,你可以直接将某些Java对象映射到TIMESTAMP列,但是你需要了解JDBC类型映射。


7

Oracle 11. 字段定义为TIMESTAMP(6) NOT NULL。使用timestamp '2019-05-16 10:05:51:19:277401'时出现错误:ORA-01882:找不到时区区域。 - Alex 75

2

One can simply use

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

这样,您就不必担心日期格式字符串,只需使用默认的时间戳格式即可。

适用于Oracle 11,不确定是否适用于早期版本的Oracle。


1

为了我的未来参考:

使用 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文档

1
在SQL中插入日期。
insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');

如果我们想要插入系统日期

insert
into tablename (timestamp_value)
values (sysdate);

0

首先,您需要使字段可为空,然后在此之后非常简单 - 不要放置值,而是放置此代码CURRENT_TIMESTAMP


0
以下示例对我工作得很好。
INSERT INTO "DB"."TBL" (UPDATEDDATETIME) 
VALUES (TO_TIMESTAMP('2022-07-12 17:16:05.551000000', 'YYYY-MM-DD HH24:MI:SS.FF'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接