參考資料:
- TechOnTheNet.com: Oracle / PLSQL: Oracle Error Messages
- stack overflow: ORA-30076 when trying to find days between dates
- TechOnTheNet.com: Oracle / PLSQL: EXTRACT Function
先依發生時間臚列問題:
- ORA-01843: not a valid month
- ORA-30076: invalid extract field for extract source
- ORA-01722: invalid number
- ORA-00932: inconsistent datatypes
起因:計算datatype分別為DATE和TIMESTAMP兩屬性(attribute)之間的時間差,假設叫A和B
原以為將兩者相減就可以得到差幾天,超簡單語法如下:
select sysdate - to_date('20180418', 'yyyymmdd') from dual
也的確跑出意料之中的結果,這時候只要乘以24會得到小時數,再乘以60會得到分鐘數,再乘以60會得到秒數(小學數學的概念),but
上面的語法是兩個datetime之間的運算,問題我是要計算datetime和timestamp,天曉得他們計算的結果居然不是天數,而是我的老天鵝啊~無法to_char或to_date或to_number的超固執datetime
沒辦法,最後只能出大絕招用EXTRACT Function,如:
--假設table A的屬性叫datetime,table B的屬性叫timestamp select --EXTRACT(year FROM(A.datetime- B.timestamp)) AB_year, --無此資料,加這段會出錯 --EXTRACT(month FROM(A.datetime- B.timestamp)) AB_month,--無此資料,加這段會出錯 EXTRACT(day FROM(A.datetime- B.timestamp)) AB_day, --天數差 EXTRACT(hour FROM(A.datetime- B.timestamp)) AB_hour, --小時差 EXTRACT(hour FROM(A.datetime- B.timestamp)) + EXTRACT(minute FROM(A.datetime- B.timestamp)) / 60 + EXTRACT(second FROM(A.datetime- B.timestamp)) / 3600 TOTAL_hour --先算好總時數差,分鐘和秒換算成時數含在這裡面 from A, B --(下略)