我有一组需要存储在 Oracle 数据库中的开始和结束时间。我需要以一种易于搜索的方式存储它们(即,典型的搜索是查找时间值(例如上午 9:30)落在开始时间和结束时间之间的所有行。在 SQL Server 中,我只会使用 TIME 数据类型字段,但 Oracle 似乎没有等效项。
我看过许多博客和论坛,他们建议只使用 DATE 字段并使用 TO_CHAR 进行转换,然后进行比较,或者将时间值存储为 varchar(4 / HHMM) 或 varchar(6 / HHMMSS) 字段。这两者似乎都不必要地低效。
在 Oracle 中是否有更好或更有效的方法来完成此任务?
如果您不需要存储日期组件,那么 aninterval day(0) to second
是最实用的方法。如果您需要进行任何计算以找出两次之间经过了多长时间,那么最大的优势就出现了,因为您不需要立即进行任何额外的处理。
例如:
create table times ( t1 interval day(0) to second, t2 interval day(0) to second);
insert into times values ( interval '0 09:30:00' day(0) to second, interval '0 12:30:00' day(0) to second);
insert into times values ( interval '0 10:30:00' day(0) to second, interval '0 13:45:00' day(0) to second);
insert into times values ( interval '0 11:30:00' day(0) to second, interval '0 12:05:01' day(0) to second);
commit;
SELECT * FROM times
where t1 between interval '0 10:00:00' day to second and interval '0 11:00:00' day to second ;
T1 T2
----------- -----------
0 10:30:0 0 13:45:0
SELECT max(t2-t1) FROM times;
MAX(T2-T1)
-----------
0 3:15:0.0
Run Code Online (Sandbox Code Playgroud)
您还可以使用标准函数来提取时间的各个组成部分(小时、分钟等):
SELECT extract(hour from t1) hr, extract(minute from t1) mn, extract(second from t1) sec
FROM times;
HR MN SEC
---------- ---------- ----------
9 30 0
10 30 0
11 30 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25275 次 |
最近记录: |