oracle sql 求时间差(均为字符串时间)
oracle sql find time difference (both time in string)
在我的数据库中,我有 2 列 START_TIME、END_TIME,都在 VARCHAR2(8) 中,我需要使用 END_TIME- START_TIME 找到持续时间.
START_TIME | END_TIME | DURATION
21:30:03 21:34:11 00:04:08
我想做类似下面的事情,我该怎么做?
SELECT TO_DATE(END_TIME, 'HH24:MI:SS') AS END,
TO_DATE(START_TIME, 'HH24:MI:SS') AS START,
(END-START) AS duration FROM Table1;
您的设计有缺陷。
- 您永远不应将 datetime 值存储为 string.
- DATE总是有日期和时间元素,所以不需要单独存储时间元素。
无论如何,作为解决方法,您需要先将字符串转换为日期,然后找到以 秒 为单位的持续时间,将秒数添加到 TRUNC(SYSDATE)
,然后剩下的很简单日期格式。
例如,
SQL> WITH sample_data AS(
2 SELECT '21:30:03' START_TIME, '21:34:11' END_TIME FROM dual
3 )
4 SELECT start_time,
5 end_time,
6 TO_CHAR (TRUNC (SYSDATE) + (to_date(end_time, 'HH24:MI:SS') -
7 to_date(start_time, 'HH24:MI:SS')
8 ) , 'hh24:mi:ss' ) duration
9 FROM sample_data;
START_TI END_TIME DURATION
-------- -------- --------
21:30:03 21:34:11 00:04:08
SQL>
在我的数据库中,我有 2 列 START_TIME、END_TIME,都在 VARCHAR2(8) 中,我需要使用 END_TIME- START_TIME 找到持续时间.
START_TIME | END_TIME | DURATION
21:30:03 21:34:11 00:04:08
我想做类似下面的事情,我该怎么做?
SELECT TO_DATE(END_TIME, 'HH24:MI:SS') AS END,
TO_DATE(START_TIME, 'HH24:MI:SS') AS START,
(END-START) AS duration FROM Table1;
您的设计有缺陷。
- 您永远不应将 datetime 值存储为 string.
- DATE总是有日期和时间元素,所以不需要单独存储时间元素。
无论如何,作为解决方法,您需要先将字符串转换为日期,然后找到以 秒 为单位的持续时间,将秒数添加到 TRUNC(SYSDATE)
,然后剩下的很简单日期格式。
例如,
SQL> WITH sample_data AS(
2 SELECT '21:30:03' START_TIME, '21:34:11' END_TIME FROM dual
3 )
4 SELECT start_time,
5 end_time,
6 TO_CHAR (TRUNC (SYSDATE) + (to_date(end_time, 'HH24:MI:SS') -
7 to_date(start_time, 'HH24:MI:SS')
8 ) , 'hh24:mi:ss' ) duration
9 FROM sample_data;
START_TI END_TIME DURATION
-------- -------- --------
21:30:03 21:34:11 00:04:08
SQL>