作者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://www.ptt.cc/bbs/Database/M.1566917352.A.D72.html
推 funk6478: 3(天) 04(時) 35(分) 04(秒) .961000(毫秒) 08/28 16:34
→ funk6478: M1這樣直接減 他不是當日期在算 是當成2個數在減 08/28 16:41
→ funk6478: 像M1的2就變成 20180320072337.188-20180306084356 08/28 16:45