我的时间戳如下 '01:54:45' 在一列中,我想将其更改为 int 或 bigint 例如 1809384,只是相同时间戳的随机数,即如果时间戳与 例如 中的时间戳相同,则应该将其转换正如我所提到的,转换为 bigint 。谁能帮我解决这个问题,我想计算工作流程在 2、3 天内完成所需的平均时间。随后,一旦我得到平均值,我想将其转换回给定的时间戳格式。例如,如果平均值是 728638,我希望将其转换回“01:03:23”。
我尝试了 to_number(to_char('01:54:45', 'HHMISS')) 但它不起作用。
对我来说,它看起来好像“时间戳”存储为代表
hours:minutes:seconds
的字符串。如果是这样,一种选择可能是
这是一个例子:
样本数据; 大约少了6分钟,多了2小时,这意味着最终结果应该是“2小时0分钟”和“(46 + 18) / 2 = 64 / 2 = 32秒”。
SQL> with
2 test (col) as
3 (select '01:54:46' from dual union all
4 select '02:06:18' from dual
5 ),
查询从这里开始:
6 convert_to_number as
7 (select col,
8 to_number(regexp_substr(col, '\d+', 1, 1)) * 60 * 60 +
9 to_number(regexp_substr(col, '\d+', 1, 2)) * 60 +
10 to_number(regexp_substr(col, '\d+', 1, 3)) to_num
11 from test
12 ),
13 calculate_average as
14 (select avg(to_num) avg_tn
15 from convert_to_number
16 ),
17 hms as
18 (select avg_tn,
19 avg_tn / (60 * 60) c_hour,
20 --
21 mod(avg_tn / (60 * 60), 1) * 60 c_min,
22 --
23 mod(mod(avg_tn / (60 * 60), 1) * 60, 1) * 60 c_sec
24 from calculate_average
25 )
26 select lpad(trunc(c_hour), 2, '0') ||':'||
27 lpad(trunc(c_min) , 2, '0') ||':'||
28 lpad(trunc(c_sec) , 2, '0') as result
29 from hms;
RESULT
--------
02:00:32
SQL>