iT邦幫忙

0

Oracle時間加減無法顯示正確數值

huang2189 7 月前3001 瀏覽

資料庫:Oracle 11g

最近在自修Oracle,在算術運算部份出現如下圖所示

(hiredate是員工進入公司的時間)

運算結果應該要是數值,但是結果不是
想請問,有人知道要怎麼處理嗎?


改用SYSDATE-TO_DATE(hiredate)
結果如下圖:


To wonton


如果用命令字元視窗


如果用

select ename,floor(sysdate - hiredate)/7 from emp where deptno=10 ;


完解!!
解釋如 wonton


看更多先前的討論...收起先前的討論...
wonton iT邦高手 6 級 ‧ 7 月前 檢舉
SYSDATE - TO_DATE(hiredate)
huang2189 iT邦新手 5 級 ‧ 7 月前 檢舉
謝謝你的回答,不過結果還是一樣
wonton iT邦高手 6 級 ‧ 7 月前 檢舉
可以先了解一下 hiredate 的資料型別? 然後再 output 一些結果,這樣比較好抓出問題。比如
SELECT ename, SYSDATE, hiredate, TO_DATE(hiredate) FROM emp WHERE deptno=10
huang2189 iT邦新手 5 級 ‧ 7 月前 檢舉
你是說的資料型別,是像上面照片那樣嗎?
huang2189 iT邦新手 5 級 ‧ 7 月前 檢舉
不過,如果用命令視窗會是正常的。
wonton iT邦高手 6 級 ‧ 7 月前 檢舉
如果資料型別是 Date 的話,你一開始的語法就是對的了,只是答案算出來是 1833.70468 (除不盡後面應該還有很多小數),所以 sqlplus (命令視窗) 顯示 1833.70468,但 Oracle SQL Developer 用科學記號表示法 1.8E+03,E+03 是數字還要乘上 10 的 3 次方的意思,所以 Oracle SQL Developer 還是回覆你 1933.70468... 沒錯,只是顯示用了 1.8E+03 而已。

如果你取幾週,只想要取到整數,可以這樣下
SELECT ename, ROUND((SYSDATE - hiredate) / 7, 0) weeks FROM emp WHERE deptno = 10
想要取到小數第1位,就將 ROUND 裡面的第二參數 0 改成 1 就好,以此類推。
wonton iT邦高手 6 級 ‧ 7 月前 檢舉
上面有一個 1833.70468 不小心打成了 1933.70468 XDD
huang2189 iT邦新手 5 級 ‧ 7 月前 檢舉
謝謝!! 又長知識了!!

2 個回答

0
wwx
iT邦研究生 1 級 ‧ 7 月前
最佳解答

這不是小數位數太多的顯示問題而已嗎?
可以取整數INT或四捨五入ROUND應該就好了吧...
例如:
四捨五入取1位小數
ROUND((SYSDATE-hirwdate)/7,1)

wwx iT邦研究生 1 級 ‧ 7 月前 檢舉

hirwdate打錯了,應該是hiredate

0
做工仔人!
iT邦高手 1 級 ‧ 7 月前

select ename,floor(sysdate - hiredate)/7 from emp where deptno=10 ;

huang2189 iT邦新手 5 級 ‧ 7 月前 檢舉

謝謝你,有一個答案是正常了。

我要發表回答

立即登入回答