【问题标题】:Oracle SQL time data typeOracle SQL 时间数据类型
【发布时间】:2012-12-11 16:03:21
【问题描述】:

我希望在多个列中只存储一个时间值,但我不确定我必须使用什么数据类型? 当前有 TIMESTAMP,但这似乎也可以存储日期,如果我试图存储比赛的记录时间,这将毫无用处。

任何想法,我已经四处搜索,但找不到我要找的东西。

感谢您的阅读!

【问题讨论】:

  • 更多关于您将如何使用这些数据以及您需要的精度将有助于提供更好的答案的信息。

标签: sql oracle


【解决方案1】:

比赛经过的时间应存储在INTERVAL DAY TO SECOND 中。

SQL> create table runner(
  2    runner_id number primary key,
  3    runner_name varchar2(100),
  4    runner_time interval day to second
  5  );

Table created.

SQL> insert into runner
  2    values( 1, 'Justin', numtodsinterval( 250, 'second' ) );

1 row created.

SQL> select *
  2    from runner;

 RUNNER_ID RUNNER_NAME          RUNNER_TIME
---------- -------------------- ------------------------------
         1 Justin               +00 00:04:10.000000

【讨论】:

  • intervalsnumtodsinterval()to_dsinterval() 的文档供参考。
  • 如何更改表中当前列的数据类型以允许我存储 INTERVAL DAY TO SECOND
  • @Max - 表是空的吗?如果是,您可以执行ALTER TABLE 来修改列的数据类型。否则,您几乎肯定需要添加一个具有正确数据类型的新列,移动数据(如何操作将取决于当前数据类型),删除旧列,如果需要,重命名新列列。
  • 感谢您的帮助,辛苦了!是否可以对两列(都是 INTERVAL DAY TO SECOND 数据类型)进行 SUM 查询?如果是这样,我该怎么做?似乎找不到任何对我有意义的东西。
【解决方案2】:

TIMESTAMPDATETIME 在这里不合适。您要存储的不是单个时间点,而是时间间隔。 Oracle 9i 及更高版本支持此类间隔。尝试使用INTERVAL DAY TO SECOND:

INTERVAL '3 12:30:06.7' DAY TO SECOND(1)

参考:http://www.techrepublic.com/article/master-oracles-time-interval-datatypes/6085801

【讨论】:

    猜你喜欢
    • 2013-12-10
    • 2012-02-17
    • 2021-05-18
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多