【发布时间】:2012-12-11 16:03:21
【问题描述】:
我希望在多个列中只存储一个时间值,但我不确定我必须使用什么数据类型? 当前有 TIMESTAMP,但这似乎也可以存储日期,如果我试图存储比赛的记录时间,这将毫无用处。
任何想法,我已经四处搜索,但找不到我要找的东西。
感谢您的阅读!
【问题讨论】:
-
更多关于您将如何使用这些数据以及您需要的精度将有助于提供更好的答案的信息。
我希望在多个列中只存储一个时间值,但我不确定我必须使用什么数据类型? 当前有 TIMESTAMP,但这似乎也可以存储日期,如果我试图存储比赛的记录时间,这将毫无用处。
任何想法,我已经四处搜索,但找不到我要找的东西。
感谢您的阅读!
【问题讨论】:
比赛经过的时间应存储在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
【讨论】:
numtodsinterval() 和 to_dsinterval() 的文档供参考。
ALTER TABLE 来修改列的数据类型。否则,您几乎肯定需要添加一个具有正确数据类型的新列,移动数据(如何操作将取决于当前数据类型),删除旧列,如果需要,重命名新列列。
TIMESTAMP 和 DATETIME 在这里不合适。您要存储的不是单个时间点,而是时间间隔。 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
【讨论】: