2017-08-31 12 views
-1

私はDOB列を持つ従業員表を持っているので、現在すべての従業員の現在の年齢を表示します。私はこのクエリを使用して従業員の年齢と年数を正確に調べる方法

SELECT * 
FROM (SELECT ename, 
       job, 
       dob, 
       TRUNC(MONTHS_BETWEEN(SYSDATE,DOB)/12,1) AGE 
     FROM employee); 

以下のようにクエリを知っていた年齢を見つけるために
私は、すべての従業員の年齢を得ることができますが、2.5は、私はその年齢を表示する必要があるとして、従業員の年齢が表示されている場合、私の要件は、あります2年6ヶ月として。

+1

---これを試してみてください - この場合は2と6 –

答えて

2

あなたはわずか12で割ったときの商と余りを見つける必要があるあなたが12で割っ前に、総ヶ月だった

SELECT ename, 
     job, 
     dob, --TRUNC(MONTHS_BETWEEN(SYSDATE, DOB)/12, 1) AGE 
     trunc(months_between(sysdate, DOB)/12) || ' years ' || 
     trunc(mod(months_between(sysdate, DOB), 12)) || ' months ' AGE 
    FROM employee; 
+1

持っAこれらのコメントを見て、これがなぜ完璧ではないのか(しかし、これで十分でしょう)を見てください:https://stackoverflow.com/questions/45974976/pl-sql-difference-between-two-dates/45977827?noredirect=1# comment78917731_45977827 –

+0

@Wernfried Domscheit、はい、上記のクエリは、差異のDays部分を破棄しています。これを考慮する必要がある場合、次のようにクエリを変更することができます。 –

+0

SELECT dob、--TRUNC(MONTHS_BETWEEN(SYSDATE、DOB)/ 12,1)AGE trunc(months_between(sysdate、DOB)/ 12 )|| '年' || trunc(mod(months_between(sysdate、DOB)、12))|| 'ヶ月' || TRUNC(SYSDATE - ADD_MONTHS(DOB、 TRUNC(MONTHS_BETWEEN(SYSDATE、DOB)/ 12)* 12 + TRUNC(MOD(MONTHS_BETWEEN(SYSDATE、DOB)、12))))|| '日' AGE FROM employee; –

関連する問題