2017-07-04 12 views
1

私はdb.grussell.orgでexecisesからSQLを練習し、チュートリアル5(https://db.grussell.org/sql/interface.cgi?tn=Tutorial%205&qn=9)から10 exceciseてるが何歳の従業員を要求しています月。日付操作が

ここでここで質問

How old is each employee in months. 
Format this as employee number against age in months. 
Round to the nearest whole number of months. 

は(EMPNOは従業員のIDで、DOBは、従業員表に日付型として誕生日である

select e.empno, 
round(months_between (trunc(sysdate,'mm'),trunc(dob))) 
    from employee e 

ここでは私のしている私のコードです結果

EMPLOYEE MONTHS_BETWEEN 
1  882 
2  845 
3  674 
4  647 
5  705 
6  756 
7  832 
8  714 
9  714 
10  670 
11  658 
12  700 
13  902 
14  853 
15  748 
16  658 
17  683 
18  673 
19  702 
20  640 
21  622 
22  927 
23  751 
24  810 
25  758 
26  689 
27  779 
28  732 
29  586 
30  633 
31  744 
32  695 

従業員番号が5,10,16の行については、何らかの理由で結果が正しくない私は理解できません、他のすべての結果は正しいです。

私は、ラウンド関数に何かが足りないか、MONTHS_BETWEENパラメータにいくつかの日付を加算または減算ていないよということ疑っています。

誰かがそれらと間違っているだろうかについて正しい方向に私を指すもらえますか? データの一部が正しく、一部ではありませんなぜ私は本当に理解できない... は運動が間違っているが、私が言うことができないだろうという可能性があります。あなたがsysdateを切り捨てているので

答えて

2

理由があります。したがって、今月(2017年7月)現在、あなたは現在の日付の代わりに7月1日の年齢を測定しています。

select e.empno, 
     round(months_between(sysdate, e.dob)) as age_in_months 
from employee e; 
+0

おかげゴードン、私は前の演習から切り捨てる使用していたので、コピー+過去があり、それらを入れて、私はそれが操作を台無しに実現しなかった。

は、代わりにだけ行います。 –