【问题标题】:Set default unix datetime in oracle在 oracle 中设置默认的 unix 日期时间
【发布时间】:2012-12-01 03:55:09
【问题描述】:

我想在数据库表中插入一个默认的 Unix 日期时间。但我不能插入这个。请帮我设置默认的 Unix 日期时间。我是 Oracle 的新手。

【问题讨论】:

  • 为什么要存储 Unix 日期而不是正确的数据库 DATETIMESTAMP 数据类型?
  • 有人说。快速搜索数据非常有用。这就是我需要这个的原因。因为我的表有超过千万的数据。
  • @user1804985 - 将字段声明为 NUMBER 并插入 Unix 时间戳不会让您快速搜索数据。搜索存储在适当的 DATE 列中的数据至少同样容易,因为这是所有 Oracle 日期/时间函数都可以处理的。
  • 当您问这个非常相似的问题时,这个问题是否只是重复:stackoverflow.com/questions/13656520/…?还是我遗漏了什么区别?

标签: oracle oracle11g


【解决方案1】:

SYSDATE 以 Oracle DATE 的形式返回当前日期和时间(Oracle DATE 始终包含日期和时间组件到秒)。

SYSTIMESTAMP 以 Oracle TIMESTAMP WITH TIME ZONE 的形式返回当前日期和时间,其中包括小数秒和时区。

如果您想插入一个NUMBER,它表示自 1970 年 1 月 1 日以来的秒数(我假设这就是您所说的“Unix 日期时间格式”的意思,那就是 (SYSDATE - date '1970-01-01') * 60 * 60 * 24

【讨论】:

  • 是的,你是对的。我想在插入数据时自动将此 Unix 值插入到我的日期字段中。
  • @user1804985 - 如果列定义为DATE,则不能插入数值。如果要存储数值,则必须将列声明为NUMBER
  • 我声明该列名称的数据类型是数字。
  • @user1804985 - 然后,正如我所说,您可以将(SYSDATE - date '1970-01-01') * 60 * 60 * 24 的结果插入NUMBER 列。
  • 谢谢。但是当我插入没有日期字段的记录时它会自动插入。
【解决方案2】:

您在寻找SYSTIMESTAMP,例如下面?

  INSERT INT TABLE(A, B, DATETIMECOL) 
  VALUES ('a', 'b', SYSTIMESTAMP);

这将在数据库中插入服务器的当前时间戳。

【讨论】:

  • 我需要像 sql 中的 getdate() 函数一样。
  • 什么意思?创建一个查询为:SELECT SYSTIMESTAMP FROM DUAL 的函数,这将返回当前时间戳。
  • 假设我想插入一行意味着以 Unix 日期时间格式自动插入的日期字段。
  • 我的表有三个字段 fld_id、fld_date、fld_value。现在我插入值意味着日期字段自动以 Unix 日期格式插入。
  • @user1804985 更新您的表定义并使fld_date 使用默认为SYSTIMESTAMP如果您的列fld_date 被定义为日期时间,则不必担心插入时的格式。 您需要在检索时应用格式。
猜你喜欢
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多