作者paranoia5201 (社会黑暗、行路难)
看板Database
标题[SQL ] 在Oracler计算两时间差
时间Tue Aug 27 22:49:10 2019
资料库名称:
资料库版本:Oracle
内容/问题描述:
我现在有两个时间栏位需要计算其间距,但是计算结果诡异,也不知道单位为何。
由於是在使用Oracle SQL Developer环境下操作MySQL,一切语法还是照Oracle规矩走。
也就是说,无法使用 timediff() 这样的语法。
以下是程式码与结果(M1):
select a.id, a.create_time, b.deposite_time,
((b.deposite_time) - (a.create_time))
from afbet_main.t_patron_user a,
(select acc_ref_id, min(create_time) as deposite_time
from afbet_main.t_pocket_fin_flow
group by acc_ref_id) b
where a.id = b.acc_ref_id
limit 3
id create_time deposite_time (b.deposite_time - a.create_time)
------------------------------ ------------------------- ---------------------
1 2018-03-06 08:15:22.0 2018-03-09 12:50:26.961 3043504.961000
2 2018-03-06 08:43:56.0 2018-03-20 07:23:37.188 13987981.188000
3 2018-03-07 08:06:36.0 2018-03-10 08:55:04.558 3004868.558000
换个方式再来试试看(M2):
select a.id, a.create_time, b.deposite_time,
round(24 * (date(b.deposite_time) - date(a.create_time)), 1)
from afbet_main.t_patron_user a,
(select acc_ref_id, min(create_time) as deposite_time
from afbet_main.t_pocket_fin_flow
group by acc_ref_id) b
where a.id = b.acc_ref_id
limit 3
id create_time deposite_time 24*(date(b.deposite_time) - date(a.create_time))
----------------------------- ------------------------- ---------------------
1 2018-03-06 08:15:22.0 2018-03-09 12:50:26.961 72
2 2018-03-06 08:43:56.0 2018-03-20 07:23:37.188 336
3 2018-03-07 08:06:36.0 2018-03-10 08:55:04.558 72
以下是我的问题:
1. M1计算出来的时间差,其单位是什麽?我可以怎麽得知?
2. M2计算出来的时间差,只有满一天的单位才乘上24小时,未满部分未计,非我想要。
3. 发现create_time与deposite_time是两个不同时间格式:datetime & timestamp。
我该如何把他们变成相同格式後再计算?to_char()在此无用。
4. 相减後的结果,如何把它变成相同格式:YYYY-MM-DD HH:MM:SS?
面对Oracle,实在挑战很多,还请指教,感激不尽~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.36.225 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1566917352.A.D72.html
1F:推 funk6478: 3(天) 04(时) 35(分) 04(秒) .961000(毫秒) 08/28 16:34
2F:→ funk6478: M1这样直接减 他不是当日期在算 是当成2个数在减 08/28 16:41
3F:→ funk6478: 像M1的2就变成 20180320072337.188-20180306084356 08/28 16:45